0

我有一個用戶模型。活動記錄外鍵可以是任意兩列

我有一個朋友模型列Invited_id和Inviter_id和狀態。狀態被用作標誌,不管朋友請求是否被接受。 Inviter_id是發送好友請求的用戶的id,invitee_id是接收好友請求的用戶。請檢查內嵌評論。

class User < ActiveRecord::Base 
    has_many :friends // now i want to search all the friends with accepted friend request. (sent or received both.) 
    has_many :pending_friend_requests,:class_name => "Friend", :foreign_key=>"invitee_id", :conditions => {:status => 0} 
end 

class Friend < ActiveRecord::Base 

end 

問題是如何獲取接受的朋友請求的所有朋友..發送或接收,因爲有兩個外國列。 invitee_id或Inviter_id

+0

那麼是什麼問題? – bor1s 2011-06-11 15:40:41

+0

@ bor1s的問題是如何獲取接受朋友請求的所有朋友..發送或接收 – 2011-06-11 15:44:11

+0

因此,我看到你的Frien模型中沒有user_id,所以你可以在你的關係中使用類似這樣的東西:has_many:friends,: foreign_key =>「invitee_id」,然後只是user.friends。我認爲應該讓所有的朋友都不要問他們有什麼狀態 – bor1s 2011-06-11 15:54:30

回答

0

如果我的問題是正確的,那麼這個screencast就是你需要的。

更新

Altough你說你不這樣做,我想,你需要一個自我指涉的許多一對多的關係。 而不是爲待處理的請求建立關聯,您可以創建一個命名作用域。之後,您可以通過User.find(params[:id]).friends.accepted獲得您邀請的所有朋友。

我無法理解的是,你是否希望user.friends檢索邀請我和那些邀請我的人或者只有其中的一個。

因爲你的名字(邀請人和被邀請人),我想這是第二種情況。它在屏幕錄像中被覆蓋。這是通過創建額外的倒轉協會來完成的(Ryan在最後談到了這一點)。

但是,如果它是第一個,最簡單的解決方案就是爲每個邀請者 - 被邀請者配對兩行。你可以用這個gem來簡化一些事情,但它的行爲和我說的一樣。

如果沒有幫助,請嘗試指定您的問題。

+0

我不尋找自我指涉關係.. – 2011-06-11 16:37:13

+0

我有兩列。即invitee_id和inviter_id,如果我向您發送好友請求,則我的user_id將保存在inviter_id中,並且您的user_id將保存在Invitee_id中。所以,如果我做了這些事情告訴我你,那麼在那個事業中,我將得到我向朋友請求的所有朋友。 – 2011-06-11 16:38:03

0

has_many建立關係。條件使用scope

class User < ActiveRecord::Base 
    has_many :invitees, :through => :friends 
    has_many :friends, :foreign_key=>"inviter_id" 

    def accepted_invitees 
     invitees.where(:friends => {:accepted => true }) 
    end 
end 

class Friend < ActiveRecord::Base 
    belongs_to :invitee, :class_name => "User" 
    belongs_to :inviter, :class_name => "User" 

    # needs accepted column 
end 

但是,由於模型和列的設置方式,這是令人困惑的方式。如果我這樣做,我會做這樣的事情:

class User < ActiveRecord::Base 
    has_many :friends, :through => :friendships 
    has_many :friendships 

    def accepted_friends 
     friends.where(:friendships => {:accepted => true }) 
    end 

end 

class Friendships < ActiveRecord::Base 
    belongs_to :user # change inviter_id to user_id 
    belongs_to :friend, :class_name => "User" # change invitee_id to friend_id 

    # needs accepted column 
end 
+0

yaa似乎我做錯了..讓我檢查一下,我會肯定回來。 – 2011-06-12 18:34:50