1

这是我的源代码

 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'

我不知道如何调试它,也无法理解如何引发此错误。

任何帮助都非常感谢。

谢谢

4

2 回答 2

0

如果您不响应非 html 客户端,则不必使用 respond_to。

尝试将方法更改为:

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

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

于 2010-01-10T02:41:03.737 回答
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
于 2010-05-14T09:25:10.470 回答