私は自分のアプリケーションで次の構造を使用しています。
class Foo < ActiveRecord::Base
has_many :examples, :dependent => :destroy
accepts_nested_attributes_for :examples
end
class Example < ActiveRecord::Base
belongs_to :foo
has_many :codes, :dependent => :destroy
accepts_nested_attributes_for :codes, :reject_if => lambda { |a| a[:code].blank? }
end
class Code < ActiveRecord::Base
belongs_to :example
has_many :code_kinds
has_many :kinds, :through => :code_kinds
attr_reader :kind_tokens
def kind_tokens=(ids)
self.kind_ids = ids.split(",")
end
end
class CodeKind < ActiveRecord::Base
belongs_to :code
belongs_to :kind
end
class Kind < ActiveRecord::Base
has_many :code_kinds
has_many :codes, :through => :code_kinds
end
fields_for
そして、作成と保存のフォームで完全に機能しています。
RailsCast #258 Token Fieldskind_tokens
で説明されているように使用しています
しかし、編集フォームではすべてが完全に表示されるようになり、 inのネストされた属性内のフィールドのdata-pre
属性にデータを事前入力する必要があります。kind_tokens
code
examples
RailsCast は次のように述べています。
<%= f.text_field :author_tokens, "data-pre" => @book.authors.map(&:attributes).to_json %>
@foo.examples.codes.kinds.map...
しかし、 と の関係はコレクションFoo
をexamples
返すので、私にはできません。 と同じ状況codes
です。
私はちょうど使用しています:
<%= f.fields_for :codes do |codes_form| %>
その中にある
<%= f.fields_for :examples do |examples_form| %>
nested_attributes
ループがなく、すべてがandによって行われている場合、コードの種類を事前に入力するにはどうすればよいfields_for
ですか?