フォームの作成(form_with)

Railsにおける「フォームの作成(form_with)」は、ユーザーからの入力を受け取るためのHTMLフォームを生成するためのメソッドです。Railsでは、フォームの構築において form_with ヘルパーを使うことで、シンプルかつ安全にモデルと連携したフォームや非モデルフォームを生成することができます。


1. form_withの基本構文

erb
<%= form_with(model: @user, local: true) do |form| %> <%= form.label :name %> <%= form.text_field :name %> <%= form.label :email %> <%= form.email_field :email %> <%= form.submit %> <% end %>
  • model: @user:Userモデルのインスタンスと連携したフォームを生成。

  • local: true:フォームをJavaScript非依存の通常のHTMLフォームとして送信(デフォルトは非同期)。

  • do |form|:フォームビルダーオブジェクトが渡され、フィールド作成に使用。


2. モデルと連携したフォーム

form_with はモデルと連携させることで、自動的に以下を処理します。

  • @userが新規レコードの場合 → POST /users に送信

  • @userが既存レコードの場合 → PATCH /users/:id に送信

この仕組みはRESTfulな設計に則っています。


3. 非モデルフォーム(手動でURLを指定)

モデルに依存しないフォームを作成する場合は以下のようにします。

erb
<%= form_with(url: '/contact', local: true) do |form| %> <%= form.label :name %> <%= form.text_field :name %> <%= form.label :message %> <%= form.text_area :message %> <%= form.submit 'Send' %> <% end %>

4. よく使うフィールドメソッド

メソッド 説明
text_field 一行のテキスト入力欄
text_area 複数行のテキスト入力欄
password_field パスワード入力欄(非表示入力)
email_field メールアドレス入力欄(HTML5対応)
check_box チェックボックス
radio_button ラジオボタン
select セレクトボックス
submit フォーム送信ボタン

5. バリデーションエラーの表示

バリデーションでエラーがある場合、ビューで以下のように表示できます。

erb
<% if @user.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2> <ul> <% @user.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %>

6. セキュリティ対応(CSRFトークン)

form_with は自動的にCSRF対策用のトークンauthenticity_token)をフォームに埋め込み、悪意あるリクエストからアプリケーションを保護します。


まとめ

  • form_with はビューでのフォーム作成を簡潔にするRailsのヘルパー。

  • モデルと連携すればRESTfulなルーティングに自動対応。

  • 非同期送信(remote: true)もサポート。

  • form_withを用いることで、安全かつ保守性の高いフォームを効率的に構築可能。

ChatGPT4o 生成日:2025/06/21