カテゴリー:
Rails
タグ:
 Rails ajax child_index accepts_nested_attributes_for fields_for form_for

このエントリーをはてなブックマークに追加
更新日時:
2013年09月29日(日)
作成日時:
2013年09月29日(日)

前の記事 / 次の記事

何を言っているのか自分でもよく分からないタイトルだけど、
これを具体的に何て言えばいいのか分からなすぎてこうなった。

やりたいことは、 nested_attributes_for を指定して、
ネストしたモデルを受け取れるようにしている時に、
全ての子モデルではなく、 特定の子モデルのデータだけ扱いたい
なぜならフォームパーツを ajaxで部分的に扱いたい から。

例えば次のような時

class User < ActiveRecord::Base
  has_many: articles
  nested_attributes_for :articles
end

全ての子モデルのフォームを生成するには次のようにする。

-# haml
=form_for @user do |f|
  =f.fields_for :articles |f|
    =f.label :name
    =f.text_field :name

特定の子モデルのフォームだけを生成したい時には次のように書ける。
次の場合、5番目の子モデルのためのフォームが生成される。

-# haml
=form_for @user do |f|
  =f.fields_for :articles, child_index: 5 |f|
    =f.label :name
    =f.text_field :name

そうすると例えば、

-# js.haml
- @user.articles.build
=form_for @user do |f|
  =f.fields_for :articles, @user.articles.last, child_index: @user.articles.size |f|
    $(".articles").append("#{j(render "article", f: f)}");

とか書けて嬉しい。