2012-02-13 8 views
0

Postingをモデル例として、Postに2つの属性があり、どちらも検証があるとしましょう。投稿を編集するとき、2つの属性を変更すると、1つは検証に失敗し、ページが再読み込みされます。ページがリロードされると、以前に保存されたポストの属性のバージョンがフォームに表示され、今入力した属性は表示されませんが、今入力したものはパラメータに表示されます。Railsで更新時に保持するパラメータを取得する

ポストインスタンス変数の宣言は次のようになりますので、これは典型的な作成アクションで処理される:

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

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

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

したがって、フォームに入力された変更は、パラメータに渡され、フォーム上で再レンダリングされません。私はこれを正しく記述していますか?そうであれば、検証が失敗したときにフォームでレンダリングされる変更を得る方法がありますか?あるいは、検証に失敗しない変更だけでしょうか?

+2

あなたのフォームはどのように見えますか?残りの 'update'アクションは何ですか? Postインスタンスを残りのパラメータで更新する '@ post.update_attributes(params [:post])'が必要です。 – coreyward

答えて

1

コーリーは、あなたがそうアップデートの属性を更新する必要が言うように:

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

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

あなたは、現在のポストのインスタンスを更新していません、データベースに何が入っているかが分かります。

関連する問題