【結論】
・f.objectのobjectは、
form_withやform_forなどのオプション
・formのブロック変数に対して使用する事で
ブロック内でモデルオブジェクトを
呼び出す事が出来る。
・同じコードを流用する際に、
変数を変える必要が無くなる
【目次】
【本題】
f.objectについて
form_withやform_forを利用していると、
何度か目にする機会があるのが、
「 f.object」です。
今回は、この「 f.object」がどういった役割をになっているか解説します。
実装例
まず、参考例として、下記の様なフォームを用意しました。
タイトルには、presence: trueでバリデーションを設定しており、
空白だとエラーメッセージが表示される様になっています。
この画面のコードは、下記の通りです。
= form_with(model: @post, local: true) do |f| = f.label :title = f.text_field :title = f.object.errors.full_messages_for(:title).join(',') (中略)
エラーメッセージを表示させる箇所で、
f.objectを利用しています。
ちなみに、 f.objectは、下記の様に書き換えても、正常に動作します。
= form_with(model: @post, local: true) do |f| = f.label :title = f.text_field :title =@post.errors.full_messages_for(:title).join(',') (中略)
つまり、 「f.object」は
formのブロック内で、モデルオブジェクトを
呼び出す為のコードという事が分かります。
利用シーン
例えば、Post以外のモデルでフォームを生成したい場合、
エラーメッセージを表示させるコードは流用させたいですが、
変数で指定をしていると、都度、その部分を修正しなければなりません。
しかし、f.objectで指定をすれば、その手間は省けます。
この様に、f.objectは、
コードを再利用しやすくする為に用いられています。
参考情報
Ruby - インスタンスではなくf.objectを使う理由を知りたい|teratail
form objectを使ってみよう - メドピア開発者ブログ
form_for の f.object って何だ?(Rails) | もんセレクション
《今日の学習進捗(3年以内に10000時間に向けて)》
平成から令和に変わったというのに、全く実感なし。 毎日、開発三昧のせいです。 GWという事もあって、Qiitaが過疎っているので、 変に反響を気にせず投稿が出来て気楽ではある。
学習開始からの期間 :144日
今日までの合計時間:1397h
一日あたりの平均学習時間:9.8h
今日までに到達すべき目標時間:1315h
目標との解離:82h
「10,000時間」まで、
残り・・・「8603時間!」