是否可以使用属于(或/或)多个模型的模型?
例如,在我的项目中,我有一个可能属于某个人或组的订阅模型。当某人加入某个特定群组时,她会自动“继承”该群组的订阅。
我已经设置了以下关联
In person.rb:
has_many :subscriptions
在group.rb中:
has_many :subscriptions
在subscription.rb中:
belongs_to :person
belongs_to :group
此外,我在订阅表中添加了person_id和group_id的字段。
问题在于,当我尝试创建一个订阅时,让我们说一个人我得到一个“组必须存在”的错误。
有没有办法克服这个问题?
如果不是绝对必要,我宁愿避免使用多态关联。
答案 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_one
或has_many
关联
has_many :subscriptions, foreign_key: :resource_id
注意:需要在订阅表中添加resource_id和resource_type列