2016-10-13 4 views
0

Ich arbeite an einem Projekt und es ist ein Fehler aufgetreten, wenn ein Kunde Antworten erhält. Wenn sie einen API-Aufruf aufgerufen haben, haben sie einen Fehler von 500 bekommen. Aus den Protokollen identifiziert ich den Code den Fehler verursacht, die unten gezeigt wird:Was macht der Code "Ruby on Rails"?

def send 
    adapter = @config['type'] 
    response = "Adapters::#{adapter}".constantize.new(@config, @msisdn, @message).send 
    response ? (%w(200 201 202).include? response.code.to_s) : false 
end 

Der Fehler durch die Linie verursacht wird:

response ? (%w(200 201 202).include? response.code.to_s) : false 

Mein Verständnis dieser Linie begrenzt ist, so mit einigen könnten tun helfen, es besser zu verstehen. Ich glaube, es überprüft, ob die Antwort einen der Codes 200, 201 oder 202 enthält, aber nicht sicher. Jede Hilfe wird geschätzt.

+1

Was ist der Fehler? –

+0

2016-10-04 10:08:44 +0000: Rack app Fehler: # EamonnMcElroy

+0

Die Zeile davor. Es scheint, dass Sie es nicht vollständig zur Verfügung gestellt haben. –

Antwort

1

Der Fehler scheint zu sein, dass der Adapter #send Methode true/false zurückgibt statt irgendeine Art von Antwort Objekt, das erwartet wird.

können Sie finden, wo der Fehler stammt aus durch:

adapter = "Adapters::#{adapter}".constantize.new(@config, @msisdn, @message) 
puts adapter.method(:send).source_location 

Oder Sie können den Zustand beheben:

def send 
    adapter = @config['type'] 
    response = "Adapters::#{adapter}".constantize.new(@config, @msisdn, @message).send 
    response.try(:code).in?(200..202) 
end 

try ruft eine Methode „sicher“ durch, wenn die Methode definiert ist, zu überprüfen. .in? ist eine Art von invertierten includes? auf Steroiden. Beide sind ActiveSupport core extensions von Schienen zur Verfügung gestellt.

2

Er übersetzt im Grunde diese:

if(response) 
    if(['200', '201', '202'].include?(reponse.code.to_s)) 
    return true 
    else 
    return false 
    end 
else 
    return false 
end