我正在使用具有has_and_belongs_to_many关系的STI模型。
所以我User
有许多不同类型的Templates
,例如MainTemplate < Template
; NotSoMainTemplate < Template
;等等
有没有办法限制每个用户只有一个MainTemplate
而只有一个NotSoMainTemplate
,以此类推所有类型?
答案 0 :(得分:3)
让我重申一下我所理解的问题陈述。
您希望User
每个模板的最多一种种类。即。
Template
(父表)的直接关系基于上述假设,我建议您执行以下操作:
habtm
和User
Template
关联
main_template_id
,not_so_main_template_id
添加到User
添加以下关联:
class MainTemplate < Template
has_many :users
end
class NotSoMainTemplate < Templete
has_many :users
end
class class User < ActiveRecord::Base
belongs_to :main_template
belongs_to :not_so_main_template
end
答案 1 :(得分:0)
由于您已经在使用STI,因此可以尝试has_one
。
class Template < ActiveRecord::Base
has_many :users, through: template_choice
...
end
class MainTemplate < Template
...
end
class TemplateChoice < ActiveRecord::Base
belongs_to :template_choice
belongs_to :user
end
class User < ActiveRecord::Base
has_one :main_template, through: :template_choice
has_one :not_so_main_template, through: :template_choice
...
end