RailsのFormオブジェクトパターン

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オブジェクトパターンの導入の流れになります!