HABTM或HM / HMT自加入Rails

时间:2013-04-09 22:33:47

标签: ruby-on-rails has-many self-join has-and-belongs-to-many

我有一个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的方式,只是建立两种关系,但这似乎是错误的,但我担心第二种方式不允许一个人成为订阅者而一个人成为提供者。什么是最“正确”的方法?

1 个答案:

答案 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

显然,您必须在数据库中设置连接模型。这应该做到。