LoginSignup
3
7

More than 5 years have passed since last update.

form_forメモ

Posted at

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)

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7