【发布时间】:2012-06-06 16:41:51
【问题描述】:
我的应用程序具有以下结构。
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 的表单。
我正在使用kind_tokens,如RailsCast #258 Token Fields 所述
但是在编辑表单上,现在一切都完美显示了,我应该在examples 中code 的嵌套属性内的kind_tokens 字段中预先填充data-pre 属性中的数据。
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 和 fields_for 完成,我该如何为代码预填充类型?
【问题讨论】:
标签: ruby-on-rails-3 activerecord nested-attributes jquery-tokeninput