我的游戏模型上有两个字段,home_team_id和away_team_id。
我想把这两个领域联系起来作为与游戏相关的团队。
这些团队可以属于多个游戏,所以我拥有团队模型
has_many :games
我不确定在我的游戏模型上放什么。
has_many :teams
不起作用,因为它不知道要查找home_team_id和away_team_id。有没有办法告诉它团队有两个不同的关键?
我也试过这个,但它也不起作用。
has_one :away_team, :class_name => 'Team', :foreign_key => 'id'
has_one :home_team, :class_name => 'Team', :foreign_key => 'id'
最后我只想在控制台中运行@ game.teams,让主队和客队返回。
答案 0 :(得分:3)
假设您已经创建了游戏迁移,例如:
class CreateGames < ActiveRecord::Migration
def change
create_table :games do |t|
t.integer :home_team_id
t.integer :away_team_id
t.timestamps
end
end
end
您可以通过指定模型来存档它:
class Game < ActiveRecord::Base
belongs_to :away_team, class_name: 'Team', foreign_key: 'away_team_id'
belongs_to :home_team, class_name: 'Team', foreign_key: 'home_team_id'
def teams
[away_team, home_team]
end
end
答案 1 :(得分:1)
也许你会发现这有点用处:
游戏迁移:
class CreateGames < ActiveRecord::Migration
def change
create_table :games do |t|
t.date :match_date
t.timestamps
end
end
end
团队迁移:
class CreateTeams < ActiveRecord::Migration
def change
create_table :teams do |t|
t.string :name
t.timestamps
end
end
end
模型Game
:
class Game < ActiveRecord::Base
belongs_to :home_team, :class_name => "Team"
belongs_to :away_team, :class_name => "Team"
# helper for teams
def teams
[home_team, away_team]
end
end
添加参考
class AddReferences < ActiveRecord::Migration
def change
change_table :games do |t|
t.integer :home_team_id
t.integer :away_team_id
end
end
end
在控制台中:
Team.new(name: 'foo').save
Team.new(name: 'bar').save
Game.new(home_team: Team.first, away_team: Team.last).save
Game.first
# => #<Game id: 1, match_date: nil, created_at: "2013-11-20 21:53:41", updated_at: "2013-11-20 21:53:41", home_team_id: 1, away_team_id: 6>
Game.first.teams
# => [#<Team id: 1, name: "foo", created_at: "2013-11-20 21:40:19", updated_at: "2013-11-20 21:40:19">, #<Team id: 2, name: "bar", created_at: "2013-11-20 21:53:12", updated_at: "2013-11-20 21:53:12">]