2011-12-05 5 views
2

私は、1回の投稿でクラスの多くのオブジェクトの属性を編集できるようにするRailsフォームに取り組んでいます。私の最初の本能は、外側のform_forブロックを作成してから、fields_forを使ってブロック内の項目を反復することでした。1つのRailsフォームで1つのクラスの多くのオブジェクトを編集する最善の方法は何ですか?

しかし、フォームが変更するオブジェクトと1対多の関係を持つオブジェクトはありません。したがって、form_forに渡すのが正しいオブジェクトはないようです。

いずれにしても、私が見たいと思うのは、「親」オブジェクトに訴えることなく複数のオブジェクトを同時に変更するフォームの例です。おそらくこれにはform_tagが含まれますか?

(注:私はHAMLで働いている、HAMLで回答が不要にかかわらず、素晴らしいだろうので)

答えて

4

まあ、親オブジェクトは、それが容易になりますました。多くのオブジェクトの一括更新のために

、キーはレールが何を参照して生成されたHTMLソースを見てくださいすなわち

@posts.each do |post| 
    fields_for "posts[#{post.id}]", post do |p| 
    p.text_field :name 
    p.hidden_field :id 
    end 
end 

、配列としてのparamsを解析するように、右入力された名前を使用することですテキスト入力が取得するname属性。これが正しく行われた場合、params [:posts]はコントローラ内のハッシュになり、更新することができます。

http://railscasts.com/episodes/165-edit-multiple

は、関連する必要がありすぎて

+0

この応答に感謝します。私は 'fields_for'が引数としてオブジェクトを必要としないことに気付かなかった。その間に、私は自分の解決策に着きました。これまでのところはうまくいくようです。私はそれを下に掲示します。 – hoffm

0

あり、私の実際の状況にいくつかの余分なシワがありますが、ここで私は、私が撮影したアプローチ説明を願っていますいくつかの擬似コードです:

= form_tag url_for(:controller => "the_controller", 
        :action => "update") do 
    @objects_to_be_updated.each do |object| 
     = check_box_tag "[desired_path][through_the][parameters_hash]", true, object.boolean_attibute 
     = text_field_tag "[another_path][through_the][parameters_hash]", object.text_attribute 
    end 
end 

などなどが。

アクティブレコードモデルとの関連付けを必要としないフォームヘルパーのバリアントを使用すると、少しの痛みがありますが、結果として得られるパラメータの構造をより詳細に制御できるようにも見えます。

+0

うん、あなたのコードも動作します。 –

関連する問題