はじめに
プログラミング初心者が、学習を進める過程で学んだことを、整理してアウトプットをする目的で投稿しています。フォームオブジェクトの投稿2回中2回目になります。
これまでの実装手順の振り返り(概要)
1.新たにモデル機能に近いクラスを持つモデルファイルを作成する。
*クラスの定義
2.作成したモデルファイルにバリデーション記述
3.作成したモデルファイルにattr_accessorを記述
4.カラム名に対してバリデーションを記述
*このモデルファイルはアソシエーションが効かないため、必要があれば外部キーなどで取得しようとしていた、カラムのバリデーションを追記する。
実装手順の続き
5.データテーブルに保存する。
フォームオブジェクトに、フォームから送られてきた情報をテーブルに保存する処理を、作成したモデルに記述する。
Aモデル名(変数) = Aモデル名.create(price: price)
このようにAテーブルに必要な情報を記述する
Bモデル名.create(postal_code: postal_code, Aモデル名_id: 変数.id)
end
6.フォームオブジェクトを記述するビューファルの、コントローラーに記述
form_with model:@〇〇 としてインスタンス変数を渡したいため、空インスタンスを生成する。
エラー表示でもインスタンス変数を使用する。対応する各アクションに空のインスタンス生成と保存処理を記述する。
@作成したクラス名 = 作成したクラス名.new
end
def create
@作成したクラス名 = 作成したクラス名.new(ストロングパラメータ)
if @作成したクラス名.valid?
※saveメソッドはバリデーション機能がないためvalid?を使用
@作成したクラス名.save
redirect_to root_path
else
render :new
end
end
7.ビューファイルに記述してある、fomm_withにmodelオプションを記述
*エラー表示をしたい場合は、model.errors.full_messagesをeach文などで、一覧表示する(部分テンプレートにもインスタンス変数を渡すことで可能、if文とany?メソッドでエラーがある時だけ表示する)
終わりに
これで各モデルへの保存から、保存が失敗した時のrenderとエラー文生成と表示までが出来ます。