hibikousinnkibouのブログ

駆け出しプログラマーによる足跡ブログ

一つのフォームから複数のテーブルにデータを保存する方法

form_with を利用して、複数のテーブルにデータを保存する方法は、一つのコントローラーから複数のモデルへの指示を出すのではなく、新たに中間のモデルを作成し、そこにコントローラーからの指示を出させる方法をとる。

今回は、寄付の投稿をするために、保存するのは、donation.rb と address.rb である。

donations_controller.rb から指示を出す場所を donation_address.rb として作成、

include ActiveModel::Model

を使用することにより、form_with や render などの引数として使用できて、バリデーションの設定が可能になる。(モデルの機能の一部を使えるようになる!)

また、

attr_accessor :postal_code, :prefecture, :city, :house_number, :building_name, :price,
                                                          :user_id

このように、 attr_accessor を利用することで、これらを定義することができる?

みたいな感じだと思います。( form_with メソッドとして利用可能とのこと)

(複数のモデルのデータを扱えるようになる!)

donations_controller.rb で create アクションを定義するが、donation_address.rb でバリデーションを設定し、 save するという意味だと考える。