📝
【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