📝

Form Helpers

form_withで安全で便利なフォーム作成

RailsのForm Helperは単純なHTML <form>タグの代わりにセキュリティと利便性を提供します。

<%= form_with(model: @post) do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title, class: 'input' %>

  <%= f.label :content %>
  <%= f.text_area :content, rows: 10 %>

  <%= f.label :category_id %>
  <%= f.select :category_id, Category.pluck(:name, :id) %>

  <%= f.submit %>
<% end %>

form_with(model: @post)の自動処理:

  • @post.new_record? → POST /posts (create)

  • @post.persisted? → PATCH /posts/1 (update)

  • CSRFトークン自動挿入

  • パラメータ: post[title]post[content]形式

主要ヘルパー:
text_fieldtext_areapassword_fieldemail_fieldnumber_fielddate_fieldselectcheck_boxradio_buttonfile_fieldhidden_field

キーポイント

1

form_with(model: @object) — モデルベースのフォーム生成

2

自動CSRFトークン挿入(セキュリティ)

3

新オブジェクト → POST(create)、既存 → PATCH(update) 自動決定

4

f.text_field :name — post[name]パラメータとして送信

5

f.select :category_id — ドロップダウン生成

6

f.submit — 「Create Post」または「Update Post」自動テキスト

メリット

  • CSRF保護自動
  • HTTPメソッド自動決定
  • パラメータ命名規約自動適用
  • Strong Parametersと自然に連動

デメリット

  • カスタムHTMLが必要な時ヘルパーがかえって不便
  • JavaScriptフレームワークと衝突の可能性
  • Turboとの相互作用の理解が必要
  • 複雑なネストフォームは設定が面倒

ユースケース

CRUDフォーム生成 検索フォーム ファイルアップロードフォーム ネストフォーム(accepts_nested_attributes_for)