在更新操作中,抛出NoMethodError

时间:2010-01-09 22:09:18

标签: ruby-on-rails actionpack

这是我的源代码

 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

我在这一行收到错误

respond_to do |format|

并且错误消息是“当你没想到它时你有一个nil对象。在评估nil.call时发生错误”。

堆栈跟踪中的五行如下

/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'

我不知道如何调试这个,我无法理解如何引发这个错误。

真正感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

如果您没有回复非HTML客户端,则不必使用respond_to。

尝试将方法更改为:

  if @recipe.update_attributes(params[:recipe])
   redirect_to :action => "edit"
  end

如果可行,则错误看起来像是应用程序的mime类型配置中的某个位置。

答案 1 :(得分:0)

当您不使用yieled 格式对象时,会出现此隐藏错误。事实上,当update_attributes调用失败时,你真的应该做些什么,例如渲染编辑模板:

  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