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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top