📝
【Rails】form_withヘルパー
form_withヘルパー
form_with
ヘルパーは、RailsのViewファイル内でフォームを簡単に作成するためのメソッドです。
form_withの基本形
form_withの基本形
<%= form_with(model: @object, url: path_or_url, local: true/false) do |f| %>
<!-- フォームの内容 -->
<% end %>
-
model
オプション: フォームが対象とするモデルオブジェクトを指定します。インスタンス変数@object
を使用します。 -
url
オプション: フォームが送信される先のURLを指定します。path_or_url
にはルーティングヘルパーメソッドを使用するか、直接URLを指定します。 -
local
オプション: フォームデータを非同期に送信するかどうかを指定します。true
の場合は非同期 (remote: true
) 、false
の場合は同期です。
コントローラにnewアクションの定義
List
モデルの作成がある前提での説明をします。
newアクションに記述を行います。次のようにインスタンス変数@list
を定義し、List.new
を格納します。
List.new
と定義することで、Listモデルの情報をもとに新しくオブジェクトが作成され、Listモデルに存在するtitle、bodyが格納できるようになります。
app/controllers/lists_controller.rb
class ListsController < ApplicationController
def new
# Viewへ渡すためのインスタンス変数に空のModelオブジェクトを生成する。
@list = List.new
end
end
Viewファイルの記述
コントローラにnewアクションを定義し、対応するViewファイルに以下の記述をします。
app/views/lists/new.html.erb
<%= form_with model: @list do |f| %>
<h4>タイトル</h4>
<%= f.text_field :title %>
<h4>本文</h4>
<%= f.text_area :body %>
<%= f.submit "投稿"%>
<% end %>
ブロック変数とは:
|f|
[1]の部分はブロック変数と言い、特定の範囲内で使える変数のことです。ここでは、フォーム内のフィールドやボタンを定義するために使用されます。
-
form_with
メソッドの第1引数にmodel: @list
を指定しています。これにより、フォームが@list
というモデルオブジェクトに関連付けられます。 - 第2引数としてブロック変数を渡しています。このブロック内で、フォーム内の各要素を生成しています。
-
form.text_field :title
の部分では、:title
という属性名を持つテキスト入力フィールドが生成されます。このテキスト入力フィールドは、@list
モデルオブジェクトのtitle
属性と関連付けられます。 -
form.text_area :body
の部分では、:body
という属性名を持つテキストエリアが生成されます。これも@list
モデルオブジェクトのbody
属性と関連付けられます。 -
form.submit "投稿"
の部分では、テキストが "投稿" の送信ボタンが生成されます。
このように、ブロック内で form
変数(|f|)を使用することで、フォームの各要素を生成し、モデルオブジェクトと関連付けることができます。
最初勉強した時はなんとなくの理解でしたが、改めて復習すると理解が深まりますね♪
-
ブロック内で使用する変数名は自由だが、一般的には
f
を使用する。 ↩︎
Discussion