这是我的源代码
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'
我不知道如何调试这个,我无法理解如何引发这个错误。
真正感谢任何帮助。
由于
答案 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