模型belongs_to eiher /或多个模型

是否有可能拥有一个属于(或/或)多个模型的模型?

例如,在我的项目中,我有一个可能属于某个人或组的订阅模型。 当某人加入某个特定群组时,她会自动“inheritance”该群组的订阅。

我已经建立了以下协会

在person.rb:

has_many :subscriptions 

在group.rb中:

 has_many :subscriptions 

在subscription.rb中:

 belongs_to :person belongs_to :group 

另外,我在订阅表中添加了person_id和group_id的字段。

问题是,当我尝试创建订阅时,让我们说一个人我得到一个错误,“组必须存在”。

有办法克服这个问题吗?

如果不是绝对必要的话,我宁愿避免使用多态关联。

是的,模型可以属于多个模型。

如果关联不存在,则rails中的belongs_to现在默认会触发validation错误。

我们可以在每个关联的基础上关闭它,可选:true。 您必须将订阅关联belongs_to group声明为可选

belongs_to :class, optional: true

是的,您可以将belongs_to用于多个模型

你也可以使用多态关联

考虑以下示例,其中address可以属于多个模型

 class Subscription < ApplicationRecord belongs_to :resource, polymorphic: true end 

对于其他模型,使用has_onehas_many关联

 has_many :subscriptions, foreign_key: :resource_id 

注意:需要在订阅表中添加resource_id和resource_type列