我有一个Users
模型,希望用户能够Subscribe
到另一个User
,以便在发布内容时收到通知。
这是一种has_many自我加入和多次自我加入。
我需要输入@user.subscribers
和@user.subscriptions
。
因此,默认情况下,这种关系在某种意义上是两种方式。但是,如果@user1
subscribes
到@user2
,这并不意味着@user2
subscribed
到@user1
,@user2
可以找到@user1
@user.subscribers
通过{{1}}。
我见过Ryan Bates Railscast on Self-Referential Associations。然而,这创造了1种方式的自连接。但我认为这并不意味着双方之间可以存在两种关系。
但是,我也看到了The Rails Guide on association foreign keys.
我意识到我可能是Ryan Bates的方式,只是建立两种关系,但这似乎是错误的,但我担心第二种方式不允许一个人成为订阅者而一个人成为提供者。什么是最“正确”的方法?
答案 0 :(得分:2)
不要过于复杂化
class Subs < ActiveRecord::Base
belongs_to :subscriber, :class_name => 'User'
belongs_to :user
end
class User < ActiveRecord::Base
has_many :subs
has_many :subscribers, :through => :subs, :source => :subscriber
has_many :subscriptions, :through => :subs, :source => :user
end
显然,您必须在数据库中设置连接模型。这应该做到。