In der Update -Aktion wird ein Nomethoderror geworfen
-
19-09-2019 - |
Frage
Dies ist mein Quellcode
def update
@recipe = Recipe.find(params[:id])
respond_to do |format|
if @recipe.update_attributes(params[:recipe])
format.html {redirect_to :action => "edit" }
end
end
end
Ich bekomme einen Fehler in dieser Zeile
respond_to do |format|
Und die Fehlermeldung lautet "Sie haben ein NIL -Objekt, wenn Sie es nicht erwartet haben. Der Fehler ist bei der Bewertung von nil.call aufgetreten."
Die fünf Zeilen aus der Stapelspur sind wie folgt
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/mime_responds.rb:175:in `respond'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/mime_responds.rb:173:in `each'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/mime_responds.rb:173:in `respond'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/mime_responds.rb:107:in `respond_to'
/Path from my machine to the app/app/controllers/recipes_controller.rb:43:in `update'
Ich habe keine Ahnung, wie ich dies debuggen und nicht verstehen kann, wie dieser Fehler aufgeworfen werden kann.
Jede Hilfe wird wirklich geschätzt.
Vielen Dank
Lösung
Wenn Sie nicht auf Nicht-HTML-Kunden antworten, müssen Sie die Response_to nicht verwenden.
Versuchen Sie, die Methode zu ändern auf:
if @recipe.update_attributes(params[:recipe])
redirect_to :action => "edit"
end
Wenn dies funktioniert, sieht der Fehler so aus, als ob er sich irgendwo in der MIME -Konfiguration Ihrer App befindet.
Andere Tipps
Dieser kryptische Fehler erscheint, wenn Sie die Erträge nicht verwenden Format Objekt. In der Tat sollten Sie wirklich etwas tun, wenn der Anruf von Update_attributes fehlschlägt, beispielsweise das Rendern der bearbeiten Schablone:
def update
@recipe = Recipe.find(params[:id])
respond_to do |format|
if @recipe.update_attributes(params[:recipe])
format.html { redirect_to [:edit, @recipe] }
else
format.html { render :template => 'edit' }
end
end
end