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の評価中にエラーが発生しました」です。

スタック トレースの 5 行は次のとおりです。

/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

この不可解なエラーは、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 に答える
0

HTML 以外のクライアントに応答しない場合は、respond_to を使用する必要はありません。

メソッドを次のように変更してみてください。

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

それが機能する場合、エラーはアプリの MIME タイプ構成のどこかにあるようです。

于 2010-01-10T02:41:03.737 に答える