ActionView::Helpers::FormBuilder#form_for(record, options = {}, &block)
では:as
オプションを指定することで各種フィールドのname
属性に付けられるprefixを指定できる。
たとえば@person = Person.new
に対して、デフォルトだと
= form_for @person do |f| = f.text_field :name
とすれば、
<form> <input type="text" name="person[name]" value="" /> </form>
みたいなフォームが生成され、このperson
はインスタンスのクラス名から決定されている。
このperson[name]
のperson
の部分を指定するには次のように:as
オプションを指定すればよい。つまり、
= form_for @person, as: "human" do |f| = f.text_field :name
としたら、
<form> <input type="text" name="human[name]" value="" /> </form>
のようになる。
普段はあまり指定することがないかもしれないけど、Person
がSTIを使っていてMale
やFemale
のインスタンスなんだけど、フォームや処理系ではPerson
クラスのインスタンスとして処理したい場合(StrongParametersで受けるハッシュ名をバラけるのを避けたいとか)なんかには有効だと思う。