Railsのfields_forで異なるモデルを編集するフォームを作成

スポンサーリンク

Rails で2つ以上の種類のモデルのオブジェクトの情報を、1つのフォームで編集して送信したい場合、fields_for メソッドを使うと実現できる。

fields_for – リファレンス – – Railsドキュメント

使い方としては、通常の form_for メソッドの中にネストして fields_for メソッドを書いて、各々異なるオブジェクトを引数として渡すようにする。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
Rails 4.1.6

以下、簡単な例です。

フォームのビュー

form_for の中にネストさせて fields_for を書く。

コントローラー

SomeController の new メソッドで、それぞれ form_for, fields_for に渡す @some_object, @other_object を作成します。

Strong Parameters に注意です。SomeModel, OtherModel 用のそれぞれ2つについて、Strong Parameters を設定する必要があります。

上述の例は、@some_object と @other_object がアソシエーションを持たないケースですが、モデルが親子関係(has_many/belongs_to など)になっている場合、accepts_nested_attributes_for というメソッドを使うと便利です。詳細は以下ページ等が分かりやすい。

いまさら聞けない!? accepts_nested_attributes_forの使い方 – (゚∀゚)o彡 sasata299’s blog
Rails4 – 複数の子レコードを作成・更新する. accepts_nested_attributes_for – Qiita

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク
  • 1件のコメント
  • 訪問者です

    フォームオブジェクトを使わないで、1つのフォームで複数のモデルのオブジェクトの情報を更新できないか苦戦しておりました。
    こちらのサイトで、解決しました。あまりにうれしかったので、コメントさせていただきました。ありがとうございました。

Leave Your Message!