2011-08-01 11 views
0

私は以下の関係を持っています::discussion has_many :posts、私は、ディスカッションの中に入れ子にされた投稿モデルを持っています。検証エラーのネストされたリソースは、すべての子モデルの編集を許可します

ディスカッション#show viewには、ディスカッションに投稿(返信)を作成できるフォームがあります。

は私が持っている私の更新アクションで:

if @discussion.update_attributes(params[:discussion]) 
    format.html { redirect_to(@discussion, :notice => 'success') } 
else 
    format.html { render :action => "edit" } 
end 

私はAにfield_for :posts, @postを使用)、ネストされたモデル更新Bを許可する)単一のポストが作成のみを許可するようにフォームを制限します。

ただし、検証が失敗した場合は、フォームに属するすべての投稿が編集可能な形式で表示されます。私は、ユーザーが単一の投稿を再編集できるようにしたいだけです。これを達成する良い方法はありますか?

確認が失敗した場合、投稿は保存されず、特定の新しい投稿をピンポイントする方法がわかりません。

私は、議論用フォームを使って投稿を作成すべきではないかもしれないと思っていました。これは、オーバーヘッドのレイヤーのようなものだからです。しかし今は入れ子にしたので、投稿/新しいビューにルーティングすることはできません。

+0

私はあなたの質問を完全に理解していません。ユーザーが送信する前にディスカッションフォームからすべての投稿を編集できるのであれば、検証エラーに応じて編集するときに同じことをすることができるはずです。議論の中に投稿がたくさんあり、これが意味をなさないのであれば、fields_forを使うのはおそらくどのような場合でも最高のデザインではないでしょう。 –

+0

'field_for:posts、@ post'を使用して、フォームを1回の投稿作成​​/編集のみを許可するように制限しました。それはショーアクションです。検証が失敗した場合にのみ、編集ビューがレンダリングされ、他のすべての投稿が表示および編集可能になります。 – lulalala

+0

編集アクションはフォームを1つの投稿に限定するために何をしますか?それが何であれ、レンダリングしようとする前に更新アクションが同じように動作することを確認する必要があるかもしれません:action => 'edit'(単に編集アクションに関連付けられたビューをレンダリングします)。 –

答えて

0

これは私が単一のポスト編集できるようにのみに思い付いた方法です:

else 
    format.html { 
    @post = @discussion.posts.last 
    render :action => "edit" 
    } 

それは少しハックだ、ハッカーはまだハッキングされPOSTメッセージを送信し、他の記事を変更することができます。だから、より良い、きれいな解決策が歓迎されます。

関連する問題