2016-08-03 54 views
0

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

我已經試過協會的各種組合,任何幫助,將不勝感激。我讀過其他幾個答案,但他們都涉及第三個連接表,我不認爲我必須這樣做。

回答

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' 

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