2016-08-03 20 views
0

私はUserモデルとUserReferralモデル(簡略化)を持っています。has_many:throughテーブルを2つ持つ外部キー

基本的に、あるユーザーは他のユーザーを参照することができ、私はそれを記録します。しかし、1人のユーザーは1人のユーザーしか参照できません。私が最初にユーザーが(空でもよい)と呼ばれたことをすべてのユーザーを返すようにUser.first.converted_usersを言うことができるようにしたい

User: 
    id 
    .... 

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

私もUser.firstを言うことができるようにしたいです。最初のユーザーを参照した単一のユーザーを返すためにrefering_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' 

は、任意の助けをいただければ幸いです。私は他のいくつかの答えを読んだが、彼らはすべて私が必ずしも必要とは思わない3番目の結合テーブルを含んでいた。

答えて

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' 

、知っているのが大好きです。より良い答えが現れたら、私は数日待つつもりです。

関連する問題