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

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

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

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

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

スポンサーリンク

— 環境 —
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 の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!