0

Post をモデルの例として、Post に 2 つの属性があり、どちらにも検証があるとします。投稿を編集するときに、2 つの属性を変更すると、1 つが検証に失敗し、ページがリロードされるとします。ページをリロードすると、以前に保存したバージョンの投稿の属性がフォームに表示され、入力したばかりの属性ではなく、入力したばかりの属性がパラメーターに表示されるようです。

ポスト インスタンス変数の宣言は次のようになるため、これは一般的な作成アクションで処理されます。

@post = Post.new(params[:post])

ただし、更新アクションでは、post インスタンス変数は次のようになります。

@post = Post.find(params[:id])

そのため、フォームに入力され、params に渡される変更は、フォームに再レンダリングされません。私はこれを正しく説明していますか?もしそうなら、検証が失敗したときにフォームで変更をレンダリングする方法はありますか? それとも、検証に失敗しない変更のみですか?

4

1 に答える 1

1

Corey が言うように、更新時に属性を更新する必要があるので、次のようにします。

@post = Post.find(params[:id])

if @post.update_attributes(params[:post])
  redirect_to post_path(@post)
else
  render :new
end

現在、post のインスタンスを更新していないため、データベースに何があるかがわかります。

于 2012-02-13T21:30:47.290 に答える