In azione di aggiornamento un NoMethodError è gettato
-
19-09-2019 - |
Domanda
Questo è il mio codice sorgente
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
ottengo un errore su questa linea
respond_to do |format|
e il messaggio di errore è "Hai un oggetto nullo quando non me l'aspettavo. Si è verificato l'errore durante la valutazione nil.call".
Le cinque linee della traccia dello stack sono i seguenti
/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'
Non ho idea su come eseguire il debug di questo e non riesco a capire come può questo errore essere sollevato.
Ogni aiuto è veramente apprezzato.
Grazie
Soluzione
Se non si sta rispondendo ai clienti non-HTML, non c'è bisogno di usare il respond_to.
Provare a cambiare il metodo di:
if @recipe.update_attributes(params[:recipe])
redirect_to :action => "edit"
end
Se funziona, l'errore sembra che sia da qualche parte nel tipo di configurazione mime della vostra applicazione.
Altri suggerimenti
Questo errore criptico appare quando non si utilizza il yieled formato oggetto. In realtà, si dovrebbe davvero fare qualcosa quando la chiamata update_attributes non riesce, ad esempio rendendo il modifica template:
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