has_many:通过带有2个表的外键

时间:2016-08-03 18:32:58

标签: mysql ruby-on-rails activerecord associations

我有一个用户模型和一个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'

我尝试了各种组合,非常感谢任何帮助。我已经阅读了其他几个答案,但他们都参与了第三个联接表,我认为我不一定需要这个表。

1 个答案:

答案 0 :(得分:0)

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

在用户中:

# 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'

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