form_forでprefixを指定する
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で受けるハッシュ名をバラけるのを避けたいとか)なんかには有効だと思う。