フォーム関連ビューヘルパー
<form>要素を生成するためのメソッドです。モデルとフォームは、フォームのフィールドがモデルの属性に対応するという面で構造が似ているためにフォーム関連のビューヘルパーを使うと品質の高いコードを簡潔に記述することが可能です。
form_with(5.1で実装された)
Rails5.1以降で推奨されているビューヘルパーです。form_tagやform_forの機能を統合したものなのでこちらを使うようにしましょう。
form_tag(5.1以降は非推奨)
モデルに関連しない汎用的なフォームを生成、5.1以降では非推奨になりました。
form_for(5.1以降は非推奨)
特定のモデルに特化したフォームを生成、5.1以降では非推奨になりました。
form_withの仕様について
model:
「model: @モデル名」と指定することでモデルとフォームを対応づけます。指定できるのは「ActiveRecord::Base」を継承したクラスのインスタンスか、「非ActiveRecord」のインスタンス(フォームオブジェクト)のどちらかになります。フォームオブジェクトについては下記の記事で解説しています。
リレーション関係にあるモデルを指定したい場合
親モデルに紐づく、子モデルをformのパラメータとして指定したい場合は下記のように配列を指定して対応します。
1 2 |
<%= form_with model: [@親モデル, @子モデル],local: true do |f| %> <% end %> |
コントローラ側では下記のような感じで記述することが可能です。
1 2 3 4 |
def メソッド名 @親モデルのインスタンス変数 = 親モデル.find(params[:id]) @子モデルのインスタンス変数 = 子モデル.new end |
url:
遷移先のURLを指定します。
local:
非同期通信を有効化するかどうかです。trueにしたら非同期を使わない、falseにすると非同期通信になります。
フォームの要素関連(フィールド系)ビューヘルパー
3つのヘルパーの中で利用頻度が高いです。「f」というのはブロック引数のことで、「form_withメソッド」の「〜do |f|」と指定している箇所で指定している引数のことです。(別にfじゃなくてもなんでも構いませんがfとすることが多いようです。)このfを利用することでモデルに対応するフィールドを出力することができます。
f.label
ラベル要素を出力する。
1 |
f.label :カラム名 |
f.text_field
入力フィールドを作る。
1 |
f.text_field :カラム名 |
f.text_area
詳細な入力フィールドを作る。
1 |
f.text_area :カラム名 |
f.hidden_field
hiddenパラメータを指定することが可能です。
f.submit
submitヘルパーを呼ぶ。
f.file_field
f.check_box
f.radio_button
f.select
f.collection_select
データベースの情報を元に選択肢を生成する。
f.grouped_collection_select
選択ボックスの選択肢をグループ化する。
この記事へのコメントはありません。