在Rails(5.2)应用程序中,我有User
,Organization
,Subscription
和Event
。
User
属于Organization
,并且User
和Organization
都可以订阅Event
。
现在我需要User
通过他的个人订阅和属于他的组织的订阅来获取相关事件。
我正在尝试创建subscribable
多态关联。
subscriptions
表具有以下字段:
但是现在我被困住了,不确定如何设置User
,Organization
和Subscription
之间的关联。
class User < ApplicationRecord
end
class Organization < ApplicationRecord
end
class Subscription < ApplicationRecord
belongs_to :subscribable, polymorphic: true
belongs_to :subscriber, polymorphic: true
end
User
应该同时位于subscribable
和subscriber
上,但是我无法使其正常工作。
我应该如何在User
模型中设置关联?
答案 0 :(得分:2)
下面的代码应该做
class Subscription < ApplicationRecord
belongs_to :subscribable, polymorphic: true
belongs_to :event
end
class User < ApplicationRecord
has_many :subscriptions, as: :subscribable
has_many :events, through: :subscriptions
belongs_to :organization
end
class Organization < ApplicationRecord
has_many :subscriptions, as: :subscribable
has_many :events, through: :subscriptions
has_many :users
end
现在,如果要呼叫用户的订阅和事件,则
@user.events
@user.subscriptions
如果您要呼叫用户组织的 subscriptions 和 events ,则
@user.organization.events
@user.organization.subscriptions
用户应同时可被订阅和订阅,但是我 无法使其工作。
不确定您的意思,但是如果要获取订阅的订户,则可以像这样在Subscription
模型中添加关联
class Subscription < ApplicationRecord
belongs_to :subscribable, polymorphic: true
belongs_to :event
has_many :subscribers, source: :user
end
现在,@subscription.subscribers
将提供订阅该订阅的用户列表。