Posted at

form_forメモ

More than 1 year has passed since last update.


form_for(record, options={}, &block)

http://api.rubyonrails.org/form_for 自分用メモ


record

モデル名のstringかsymbol or モデルオブジェクトを受け取る

recordのルーティングが config/routes.rb内でresourcesメソッドを使ってRESTfulに設定してあると、urlを明示しなくてもRailsが良きように解釈してくれる。

recordのルーティング設定で namespace が使われている場合(ex. 名前付きルートがadmin_user_path)はこうする

form_for [:admin, @user] do |f|

recordに関連が定義されているオブジェクトがある場合、こうする

form_for [@document, @comment] do |f|

と、新規作成時にちゃんと @documentに紐づく@commentが作られる。


モデルオブジェクトを渡した時の違い



  1. input要素のname属性に、渡されたモデルオブジェクトのクラス名を判断して入れてくれる。(変更したい場合はasオプションを使う)

  2. 渡されたオブジェクトが持っている属性の値をつかって初期値を表示する。(-> 永続化されていないオブジェクトでも初期値が表示できるってことかな?)


options


url

フォームのsubmit先

url_forlink_toに渡せる値なら受け取れるため、名前付きルートを指定することができる。

recordに渡されたものがstringかsymbolでurlオプションが指定されていない場合は現在のurlにフォームは送信される


namespace

設定された値をフォームの要素のid属性に接頭語として使うことで、フォームごとにユニークなものにする。

form_for @person, namespace: :hoge do |f|

= f.text_field :name # <input type="text" id="hoge_person_name" name="person[name]">


method

フォーム送信時のメソッド。たいていgetpostだが、deletepatchputなどが指定された場合は、type="hidden" name="_method"input要素が追加される


remote

trueにセットされることでsubmitの挙動をUnobtrusive JavaScript driversでコントロールすることができる。 

用語:

Unobtrusive JavaScript https://en.wikipedia.org/wiki/Unobtrusive_JavaScript


html

formタグにつけたいhtmlの属性を設定できる

data属性に関しては、htmlオプションを使わずにそのまま書ける。

form_for @person, data: {hoge: "hoge"}


authenticity_token

カスタムのauthenticity_tokenを使いたい時やauthenticity_tokenが必要ない時に設定


enforce_utf8

falseにセットすると、type="hidden" name="utf8"というinput要素が追加されなくなる

(IE8までのブラウザ向けにパラメータをUnicodeでエンコードするためのものらしい。

https://stackoverflow.com/questions/3222013/what-is-the-snowman-param-in-ruby-on-rails-3-forms-for/3348524#3348524)