📝

【Rails】form_withヘルパー

2023/06/23に公開

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|)を使用することで、フォームの各要素を生成し、モデルオブジェクトと関連付けることができます。


最初勉強した時はなんとなくの理解でしたが、改めて復習すると理解が深まりますね♪

脚注
  1. ブロック内で使用する変数名は自由だが、一般的にはfを使用する。 ↩︎

Discussion