2014-04-02 224 views
1

所以我正在做一個應用程序,其中我有一個來自4個不同用戶的4個屬性的「遊戲」模型。其中一個屬性是player_id,另外3個是用戶uid(由facebook給出的字符串id)。Belongs_to與主鍵和外鍵的關聯

這兩款機型是這樣的:

class Game < ActiveRecord::Base 
    belongs_to :player, class_name: "User" 
    belongs_to :gamer_one, class_name: "User", primary_key: "gamer_one", foreign_key: "uid" 
    belongs_to :gamer_two, class_name: "User", primary_key: "gamer_one", foreign_key: "uid" 
    belongs_to :gamer_three, class_name: "User", primary_key: "gamer_one", foreign_key: "uid" 
end 

class User < ActiveRecord::Base 
    has_many :games, foreign_key: 'player_id' 
    has_many :game_ones, class_name: 'Game', foreign_key: 'gamer_one', primary_key: 'uid' 
    has_many :game_twos, class_name: 'Game', foreign_key: 'gamer_two', primary_key: 'uid' 
    has_many :game_threes, class_name: 'Game', foreign_key: 'gamer_three', primary_key: 'uid' 
end 

當我去到控制檯,檢查User.game_ones,User.game_twos,或User.game.threes,我得到確切的關係,我想,但如果我將它倒退(Game.gamer_one,Game.gamer_two,Game.gamer_three),我只是得到空值,並且查詢做錯了。

任何想法,如果我所做的belongs_to關係在某些方面是錯誤的?

+1

交換'belongs_to'關聯中的foreign_key和primary_key。 – jvnill

+0

大聲笑,這讓它..非常感謝你先生! – PatoBeltran

+0

不錯。我已經把它作爲答案加上一點解釋。 – jvnill

回答

1

當您有匹配的關聯時,那些關聯的foreign_keyprimary_key是相同的。所以只需在belongs_to關聯中交換foreign_keyprimary_key