我的应用程序具有以下结构。
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
?