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