1

私はこれについてややばかげているように感じますが、次のとおりです。

if @prof.update_attributes(params[:profile])
      respond_to do |format|
        format.html {redirect_to(@prof, :notice => "Profile successfully created.") }
      end
    end

...私のコントローラーの update メソッドにあります。モデルでいくつかの属性を検証しています。

検証が失敗した場合は、同じフォームに戻って、さまざまな赤いテキストで叱られるようにしたいだけです。(つまり、エラー配列内のすべて)。

検証が失敗すると、「テンプレートがありません」というエラーが表示されます - 「更新」のテンプレートです。非常に単純なものを見落としているような気がします。ヘルプ!

4

2 に答える 2

1

エラーの原因は、特に指示がない限り、Rails がアクション (この場合updateは明らかに存在しない) と同じ名前のテンプレートをレンダリングしようとするためです。

やりたいことはedit、エラーが発生した場合にアクションを再度レンダリングするようレールに指示することです。通常、respond_toブロックでこれを行い、検証が成功したか失敗したかに応じて、ブロックが異なる応答を行えるようにします。

現時点では、ブロックをラップする if ステートメントがあり、エラーが発生した場合に異なる方法でレンダリングするようレールに指示するステートメントはありません。これを修正するには、次のようにします。

respond_to do |format|
    if @prof.update_attributes(params[:profile])
        # all is well, redirect as you already wrote
    else
        format.html { render action: 'edit' }
    end
end
于 2013-10-31T14:12:39.493 に答える