Rails

複数のモデルオブジェクトを同時に更新する方法

More than 3 years have passed since last update.


いろいろ参考にさせてもらいました


なにが問題か

関連モデルの情報を更新したいが、実際のアソシエーションは、1対多ではなく、関連テーブルを挟んで多対多になってしまっていて、一般的なやり方だと上手くできない。


model.rb

attr_accessible :companies_attributes

belongs_to: companies # ここが has_many になっている。。
accepts_nested_attributes_for :companies

特に困ったのがformの表示について。


問題1:


ネスト対象のフォームを作成する fields_for で指定するのは

アソシエーション名の シンボルか文字列 であり、例えば @article のように指定してはならない。


上記のルールを守ると、新規登録用に新しいオブジェクトのフォームも用意してくれてしまう。


問題2:

また、関連づくオブジェクトの指定ができない。


解決策:

fields_forの第二引数にインスタンスを指定すると新規登録用フォームは表示されない模様。


view.rb

<%= f.fields_for :companies, @mf_company.belongs_to_company do |c| %>