模型belongs_to eiher /或多个模型

时间:2018-01-28 13:22:11

标签: ruby-on-rails rails-activerecord

是否可以使用属于(或/或)多个模型的模型?

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

我已经设置了以下关联

In person.rb:

has_many :subscriptions

在group.rb中:

has_many :subscriptions

在subscription.rb中:

belongs_to :person
belongs_to :group

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

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

有没有办法克服这个问题?

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

2 个答案:

答案 0 :(得分:2)

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

如果关联不存在,rails中的

belongs_to现在默认会触发验证错误。

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

belongs_to :class, optional: true

答案 1 :(得分:0)

是的,您可以将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列