【Rails】form_forの中のselectやtext_fieldは引数で何を渡しているのか

2018年3月11日

登録(new)画面で、フォームを生成してユーザーからの入力を登録する実装。

<%= form_for(@person) do |f| %>

<%= f.label :age, '年齢' %>
<%= f.select :age, ["20代", "30代", "40代", "50代", "60代以上"],  :prompt => "選択してください" >

<%= f.label :job, '職業' %>
<%= f.text_field :job %>

<%= f.submit '登録' %>
<% end %>

こういう感じで書くと思いますが。

f.select の後に:age としたり、
f.text_fiedl :job としています。

このメソッドの後ろには「:」が付いてるのでシンボルを渡している事がわかります。

しかしこれは実はアクセサメソッドです。(Javaだとゲッターとかセッターとか言ったりするらしい)

Railsではシンボルを渡すと上手に解釈してくれて、
中で @person.ageや、@person.jobへのアクセス(変数の取得や代入)を行います。

selectメソッドの実態。第1引数がmethodになってる。
https://github.com/rails/rails/blob/v5.0.6/actionview/lib/action_view/helpers/form_options_helper.rb#L816

これは
こちらのattr_accessorの解説とも共通してるので理解の助けになる。