En la acción de actualización se lanza un NoMethodError
-
19-09-2019 - |
Pregunta
Este es mi código fuente
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
Me aparece un error en esta línea
respond_to do |format|
y el mensaje de error es "Tienes un objeto nulo cuando no se lo espera. El error se produjo mientras se evalúa nil.call".
Las cinco líneas de la traza de la pila son como sigue
/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'
No tengo ninguna idea sobre cómo depurar esto y no puedo entender cómo se puede levantar este error.
Cualquier ayuda es realmente apreciada.
Gracias
Solución
Si no está respondiendo a los clientes que no sean HTML, usted no tiene que utilizar el respond_to.
Trate de cambiar el método a:
if @recipe.update_attributes(params[:recipe])
redirect_to :action => "edit"
end
Si funciona, el error parece que está en algún lugar de la configuración de tipos MIME de su aplicación.
Otros consejos
Este error aparece críptica cuando no se utiliza el formato objeto yieled. De hecho, realmente debería hacer algo cuando la llamada update_attributes falla, por ejemplo, haciendo que el editar plantilla:
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