【问题标题】:HABTM or HM/HMT Self-Join in RailsRails 中的 HABTM 或 HM/HMT 自联接
【发布时间】:2013-04-09 22:33:46
【问题描述】:

我有一个Users 模型,希望用户能够Subscribe 到另一个User,以便在他们发布内容时收到通知。

这有点像 has_many 自联接和 many_to_many 自联接。

我需要能够输入@user.subscribers@user.subscriptions

因此,默认情况下,某种意义上的关系是双向的。但是,如果@user1subscribes@user2,那并不意味着@user2subscribed@user1 但是,@user2 可以通过@user.subscribers 找到@user1

我见过 Ryan Bates Railscast on Self-Referential Associations。但是,这会创建 1 种方式的自联接。但我认为这并没有留下双方之间可能存在两种关系的事实。

不过,我也见过The Rails Guide on association foreign keys.

我意识到我可能会采用 Ryan Bates 的方式,只建立两个关系,但这似乎是错误的,但我担心第二种方式不会允许一个成为订阅者,一个成为提供者。解决这个问题的最“正确”方法是什么?

【问题讨论】:

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


    【解决方案1】:

    不要把事情复杂化

    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
    

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

    【讨论】:

    • 我认为颠倒名称是正确的。我认为用户是订阅者,结果是订阅,但它有效。谢谢!
    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多