【问题标题】:has_many :through with a foreign key with 2 tableshas_many :通过带有 2 个表的外键
【发布时间】:2016-08-03 18:32:58
【问题描述】:

我有一个 User 模型和一个 UserReferral 模型(简化版)。

基本上一个用户可以推荐其他用户,我会记录下来。但是一个用户只能被一个用户推荐。

User:
  id
  ....

UserReferral:
  id
  user_id #the person initiating the referral
  reffered_user_id #the person that got the referral

我希望能够说 User.first.converted_users 来返回第一个用户推荐的所有用户(可以为空)

我还希望能够说 User.first.referring_user 返回推荐第一个用户的单个用户(可以是 nil)。

目前我有用户:

has_many :user_referrals
has_many :converted_users, through: :user_referrals,  source: :user

在 UserReferral 中:

belongs_to :user
has_many :users, primary_key: 'reffered_user_id', class_name: 'User'

我尝试了各种关联组合,我们将不胜感激。我已经阅读了其他几个答案,但它们都涉及第三个连接表,我认为我不一定需要。

【问题讨论】:

    标签: mysql ruby-on-rails activerecord associations


    【解决方案1】:

    经过多次试验和错误(以及了解关联):

    在用户中:

    # User whom I referred
    has_many :referrals
    has_many :converted_users, through: :referrals, :foreign_key => "id", :primary_key => "reffered_user_id", class_name: "User"
    
    # User who referred me
    has_one :referral, foreign_key: 'reffered_user_id'
    has_one :referrer, through: :referral, source: :user
    

    在推荐中:

    belongs_to :user
    has_one :converted_user, primary_key: "reffered_user_id", foreign_key: 'id', class_name: 'User'
    

    如果有人有改进,很想知道。如果有更好的答案,我会等待几天接受。

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多