私は次の3つのモデルを持っています:
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
を作成すると複数存在し、 for eachSite
を作成することで必要な数だけ関連付けることができます。InstalledTemplate
ASite
は一意しか持つことができません。同じものを 2 回 1 つ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
およびfields_for
ヘルパーを使用して、これをまったく達成できませんでした。
それはかなり単純な関係のように思えますが、何かが欠けているのではないかと心配しています. 上記をよりクリーンな方法で達成する方法について誰かアドバイスがありますか?
ありがとう