DAY13 入力フォームヘルパー メソッド(1)

TOKHEE·2024년 4월 1일

入力フォームヘルパーの種類

  • form_for: 特定モデルに特化した入力フォーム生成
    • FormTagヘルパー
    • f.Formヘルパー
  • form_tag: 汎用的入力フォーム生成
    • FormTagヘルパー
    • Formヘルパー

form_for

  • モデルオブジェクトと密接に連携したフォームを作成する際に使用される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を通じて非同期的に提出される。

form_tagメソッド

  • 一般的なフォームを作成するためのメソッド
  • ユーザーの入力を受けて特定のアクションを実行するフォーム(例: 検索フォーム、ユーザー設定フォーム)を作成する際に主に使用
  • 柔軟性: フォームフィールドの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に設定してトークン生成を省略可能

0개의 댓글