0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails] Formブジェクトパターン2/2

Last updated at Posted at 2021-07-02

はじめに

プログラミング初心者が、学習を進める過程で学んだことを、整理してアウトプットをする目的で投稿しています。フォームオブジェクトの投稿2回中2回目になります。

これまでの実装手順の振り返り(概要)

1.新たにモデル機能に近いクラスを持つモデルファイルを作成する。
*クラスの定義

2.作成したモデルファイルにバリデーション記述

:Model

3.作成したモデルファイルにattr_accessorを記述

カラム名,カラム名,・・(扱いたいカラム名記載)

4.カラム名に対してバリデーションを記述

price, presence: true

*このモデルファイルはアソシエーションが効かないため、必要があれば外部キーなどで取得しようとしていた、カラムのバリデーションを追記する。

実装手順の続き

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オプションを記述

@インスタンス変数 ,url:createアクションへのパス,local:true do |f| %>

*エラー表示をしたい場合は、model.errors.full_messagesをeach文などで、一覧表示する(部分テンプレートにもインスタンス変数を渡すことで可能、if文とany?メソッドでエラーがある時だけ表示する)

終わりに

これで各モデルへの保存から、保存が失敗した時のrenderとエラー文生成と表示までが出来ます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?