Dans l'action de mise à jour d'une NoMethodError est lancée
-
19-09-2019 - |
Question
Ceci est mon code source
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
Je reçois une erreur sur cette ligne
respond_to do |format|
et le message d'erreur est « Vous avez un objet nul quand on ne s'y attendait pas. L'erreur est survenue lors de l'évaluation nil.call ».
Les cinq lignes de la trace de la pile sont les suivantes
/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'
Je ne sais pas sur la façon de déboguer et je ne comprends pas comment cette erreur est soulevée.
Toute aide est vraiment apprécié.
Merci
La solution
Si vous ne répondez pas aux clients non html, vous ne devez pas utiliser le respond_to.
Essayez de changer la méthode à:
if @recipe.update_attributes(params[:recipe])
redirect_to :action => "edit"
end
Si cela fonctionne, l'erreur ressemble il est quelque part dans la configuration du type mime de votre application.
Autres conseils
Cette erreur cryptique apparaît lorsque vous n'utilisez pas le yieled format objet. En fait, vous devriez vraiment faire quelque chose quand l'appel échoue de update_attributes, par exemple le rendu modifier modèle:
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