form_for form_tag form_with について
form_for/form_tag/form_withの違い
form_forとform_tagの違いは、基本的にモデルの有無です!
form_forはモデルがある場合に使用し、form_tagはモデルが無い時に使用します。
そして最新環境で使用されているform_with。 こちらはform_tagとform_forの一人二役となっております。
form_for
railsで情報を送信するためのヘルパーメソッド
特定のテーブルにレコードを新規作成する。*モデルがある時に使用(投稿など)
<%= form_for @user do | form | %>
#form_forは引数のインスタンスが何も情報を持っていなければ自動的にcreateアクションへ
#既に情報を持っている場合はupdateアクションへ自動的に振り分けます
<%= form.text_field:email%> #f.htmlタグ:カラム名
<%= form.submit%>
<%end%>
form_tag
railsで情報を送信するためのヘルパーメソッド 特定のテーブルにレコードを新規作成する。*モデルがない時に使用(検索など)
<%= form_tag users_path do %>
#form_tag('PATH’, method: :メソッド名)
<%= text_field_tag :email %>
#中身に関しては、基本的に"_tag"を使用します
<%= submit_tag %>
<% end %>
form_with
form_tagとform_forの一人二役、基本的にはform_forとform_tag同様、モデルの有無によって記述が異なる。
form_withで自動でパスを選択してくれて、HTTPメソッドを指定する必要が無い
コントローラから渡された、ActiveRecordを継承するモデルのインスタンスが利用できる
form_withではinputタグは用いません
モデルなし
<%= form_with url:users_path do | form | %>
<%= form.text_field:email%>
<%= form.submit%>
<%end%>
モデルあり
<%= form_with model:@user do | form | %>
<%= form.text_field:email%>
<%= form.submit%>
<%end%>
モデルを渡したときは、URLとスコープが自動推測されます。
URL: @userがDBにある時はupdateアクションに、無い時はcreateアクションに飛びます。
スコープ: params[:email] が params[:user][:email] になります。
メソッド の種類
- f.label : labelのlabelタグを表示
- f.text_field : textのinputタグを表示
- f.date_select : モデルで設定したフィールドをselectタグで選べるようにして表示
- f.check_box : checkboxのinputタグを表示
- f.number_field: numberのinputタグを表示
- f.submit : submitのinputタグを表示
- f.collection_check_boxes : collection check boxの表示
form_with ヘルパー表
オプション | 説明 | デフォルト値 |
:url | フォームに入力されたデータを送信するURL。名前付きルートを直接使用可能 | nil |
:method | HTTPリクエスト(HTTPメソッド)の指定。 | POST |
:format | 送信するデータ形式 JSON形式やXML形式など:urlオプションが指定された場合は無視される | text/html |
:scope | ルーティングで名前空間が指定されている場合に利用するプレフィックス指定 | nil |
:model | モデルオブジェクト。オブジェクトが新規レコードの場合は作成フォームが生成され、既存レコードの場合は更新フォームが生成される | nil |
:authenticity_token | 認証トークンの指定。カスタム認証トークンでオーバーライドするかfalse、認証トークンフィールドをスキップします。 | |
:local | リモートフォームを使わない設定 | false |
:skip_enforcing_utf8 | IE5以前の文字化け対策(UTF-8の矯正送信)のスキップ設定 | false |
:builder | フォームオブジェクトのオーバーライド(オリジナルフォームコントロールの作成) | nil |
:id | オプションのHTML id属性 | nil |
:class | オプションのHTMLクラス属性 | nil |
:data | オプションのHTMLデータ属性 | nil |
:html | id、class、data以外のオプションHTML属性 | nil |