has_many:通过一个带有两个表的外键

问题描述:

我有一个用户模型和一个UserReferral模型(简化版)。has_many:通过一个带有两个表的外键

基本上用户可以引用一些其他用户,我会记录它。但是一个用户只能由一个用户引用。

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。 refer_user返回引用第一个用户的单个用户(可以为零)。

目前我已经在用户:

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' 

我已经试过协会的各种组合,任何帮助,将不胜感激。我读过其他几个答案,但他们都涉及第三个连接表,我不认为我必须这样做。

经过大量试验和错误(和学习协会):

在用户

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

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