入力フォームヘルパーの種類
- form_for: 特定モデルに特化した入力フォーム生成
- form_tag: 汎用的入力フォーム生成
-
モデルオブジェクトと密接に連携したフォームを作成する際に使用されるRailsヘルパーメソッド
-
自動パス決定
form_forはインスタンスの状態(新しく作成されたものか、既にデータベースに存在するものか等)を確認し、フォーム提出時に使用するHTTPメソッドとURLを自動で決定
例) 新しいインスタンス用のフォームはPOSTメソッドを使用してデータを生成するパスに設定
既存のインスタンスを修正するフォームはPATCHメソッドを使用して該当インスタンスをアップデートするパスに設定
-
モデルフィールド自動連携
フォームビルダーオブジェクトを通じて提供されるメソッド(f.text_field, f.date_select等)はモデルの属性と自動的に連携
=> これはフォームフィールドのname属性を手動で設定する必要がないことを意味
=> フォーム提出時にコントローラーから該当モデルオブジェクトの属性に直接アクセス可能
構文
<%= form_for
@user,
url: users_path,
html: {class: "special_form",
id: "user_form" },
method: :post do |f| %>
...
<% end %>
- url: フォームデータを送信するURLを明示的に指定
=> Railsルーティングヘルパー(例: users_path)を使用して指定可能
- method: フォームデータを送信するHTTPメソッドを指定
=> デフォルト値はpost
get, patch, put, delete等を明示的に設定可能
- html: フォームタグに追加するHTML属性(例: class, id, data-*属性等)を指定するハッシュ
- remote: trueに設定すると、フォームがAjaxを通じて非同期的に提出される。
- 一般的なフォームを作成するためのメソッド
- ユーザーの入力を受けて特定のアクションを実行するフォーム(例: 検索フォーム、ユーザー設定フォーム)を作成する際に主に使用
- 柔軟性: フォームフィールドのname属性を自由に指定可能
=> これはフォームを通じて提出されるデータの構造を完全にコントロールできることを意味
- フォームのaction属性とHTTPメソッド(GET, POST等)を直接明示する必要がある
- form_tagはフォームの動作をもっと細かく制御できるようにする。
例) フォームデータを処理するURLやフォーム提出方式(同期または非同期)を開発者が直接指定可能
構文
<%= form_tag(
search_path,
method: "get",
class:
"search_form",
remote: true) do %>
...
<% end %>
- url: フォームデータを送信するURL
=> これはform_tagの最初の引数として渡される
- method: フォームデータを送信するHTTPメソッドを指定
=> デフォルト値はpostです。
- multipart: trueに設定すると、フォームがファイルアップロードをサポート
=> これはenctype="multipart/form-data"をフォームタグに追加する。
- remote: trueに設定すると、フォームがAjaxを通じて非同期的に提出される
- authenticity_token: RailsのCSRF(Cross-Site Request Forgery)保護機能のためのトークンをフォームに含める
=> デフォルト値はtrueであり、必要に応じてfalseに設定してトークン生成を省略可能