2016-01-10 50 views
0

當您使用與默認命名(user_id)不同的外鍵(author_id)創建關聯時,能否請您介紹如何編寫rails命令? ?當外鍵模式與默認模式不匹配時,Rails控制檯命令獲取記錄

在這個例子中:

class User 
    has_many games 
end 

class Game 
    belongs_to :player_white, :class_name => "User", :foreign_key => "player_white_id" 
    belongs_to :player_black, :class_name => "User", :foreign_key => "player_black_id" 
end 

Rails的控制檯,如果我鍵入命令:

>> User.games. 

我得到一個錯誤:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column games.user_id does not exist 

我明白,這是不能夠找到外鍵user_id作爲外鍵將是player_white_id或player_black_id。但要指定在rails console命令?我試過 User(:user_id => :player_white_id)。但它不起作用。在架構文件

遊戲表:

create_table "games", force: true do |t| 
    t.integer "player_white_id" 
    t.integer "player_black_id" 
    t.string "name_for_game" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

奧運會上,有外鍵"player_white_id" and "player_black_id"但實際上屬於同一類用戶。

我試圖讓玩家在軌控制檯玩的遊戲:

>>user1 =User.create(:username => "White", :password => "123") 
>>user2 = User.create(:username => "black", :password => "123") 
>> Game.create(:player_white_id => user1.id, :player_black_id => user2.id) 

現在,如果我嘗試訪問

>>user1.games 

它拋出上述錯誤。

基本上我想得到一個特定用戶的遊戲列表。我知道我可以通過使用以下查詢得到:

Game.where("player_white_id = ? or player_black_id = ?", user.id, user.id) 

但我想知道如果我可以得到使用用戶模型。例如:

`User.game` 

謝謝!

+0

Your belongs_to看起來不錯。你能向我們展示遊戲遷移嗎?外鍵必須存儲在遊戲表中,並且與您在模型中指定的名稱相同。我不確定我瞭解你的查詢。 User.where(:id => id)需要你有一個實際的值。不是一個符號。 – muichkine

回答

0

用foreign_key選項定義has_many :games。因爲沒有名爲gamesUser類的方法

class User 
    has_many :white_games, class_name: 'Game', foreign_key: 'player_white_id' 
    has_many :black_games, class_name: 'Game', foreign_key: 'player_black_id' 

    # If you want all game 
    def games 
    Game.where('player_white_id = ? OR player_black_id = ?', self.id, self.id) 
    end 
end 
0

User.games將拋出一個錯誤。有方法 雖然User類的實例。請先嚐試創建User,然後再嘗試User.first.games