我有以下三个模型:
class Site < AR::Base
has_many :installed_templates, :as => :installed_templateable, :dependent => :destroy
accepts_nested_attributes_for :installed_templates, :allow_destroy => true, :update_only => true, :reject_if => lambda { |t| t[:template_id].nil? }
end
class Template < AR::Base
has_many :installed_templates, :inverse_of => :template
end
class InstalledTemplate < AR::Base
belongs_to :template, :inverse_of => :installed_template
belongs_to :installed_templateable, :polymorphic => true
end
业务逻辑是Templates
当我创建一个时存在多个Site
,我可以通过InstalledTemplate
为每个创建一个来关联任意数量的。ASite
只能具有唯一Templates
性-我不能将相同的Template
两次与单个关联Site
。
我在表格上有以下内容Site
:
<% Template.all.each_with_index do |template| %>
<%= hidden_field_tag "site[installed_templates_attributes][][id]", Hash[@site.installed_templates.map { |i| [i.template_id, i.id] }][template.id] %>
<%= check_box_tag "site[installed_templates_attributes][]]template_id]", template.id, (@site.installed_templates.map(&:template_id).include?(template.id) %>
<%= label_tag "template_#{template.id}", template.name %>
<% end %>
以上是经过大量实验后似乎唯一可行的方法。form_for
使用andfields_for
助手我根本无法实现这一点。
这似乎是一种非常直接的关系,我担心我错过了一些东西。有人对如何以更清洁的方式完成上述任务有任何建议吗?
谢谢