0

我的游戏模型home_team_id和away_team_id有两个字段。Rails - 将一个模型中的两个不同字段关联为一个关联

我想将这两个领域作为与游戏相关的团队。

这些团队可以属于一个以上的比赛,我有我的团队模式

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

你可以定义一个方法游戏模型中的'teams'并返回数组中的away_team和home_team。 – Mindbreaker

+0

我可以在控制台中使用此方法调用游戏记录吗? – 2bor02b

回答

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 
+0

这工作完美。尽可能简单,我也希望,谢谢! – 2bor02b

1

也许你可以找到这个一点点有用:

迁移游戏:

移民团队:

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">] 
+0

这起作用。我的关联需要是belongs_to,我需要定义队列数组。谢谢。 – 2bor02b

相关问题