📝

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_field、text_area、password_field、email_field、number_field、date_field、select、check_box、radio_button、file_field、hidden_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)