Formオブジェクトパターンとは1つのフォーム送信で複数のモデルを操作した場合や、テーブルに保存しない情報にバリデーションを設定したい場合につかいます!
つまり、コントローラーが複数のモデルに指示出すこともできるけどすごく大変だから間(Formオブジェクト)に入ってもらおうということです!
例えるなら、コントローラーが王様でFormオブジェクトが執事みたいな感じです!王様は執事に指示するだけで、他の人たちに指示する必要がなくなるということです!そう思ったら執事が必要じゃないですか?(笑)
それではFormオブジェクトパターンの導入を説明していきます!
①モデルにてFormオブジェクトのファイルを作成し、クラスを定義する。
②form_withメソッド(テンプレートみたいなもの)に対応する機能とバリデーションを行う機能を持たせる。
ActiveModel::Modelをincludeするとform_withメソッドの引数と扱え、バリデーション機能を使用できる
このことをFormオブジェクトという。
③保存したい複数のテーブルのカラム名をすべてを属性値として扱えるようにする
attr_accessor :カラム名
attr_accessorを利用することで
値の取得ができるメソッドの定義(ゲッター)
値の更新ができるメソッドの定義(セッター)
それぞれの定義を一度にしてくれるのがattr_accessorである。
④バリデーションの処理を書く
⑤データをテーブルに保存する処理を書く
⑥コントローラーでnew,createアクションでFormオブジェクトのインスタンスを生成するようにする
⑦フォーム作成の部分をFormオブジェクトのインスタンスを引数として渡す形にする
以上がFormオブジェクトパターンの導入の流れになります!