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