2013-02-13 121 views
1

我有一个问题,我以某种不满意的方式解决。Rails两对多关系

我有一个游戏模型,在游戏中总是有两个团队参与到Team模型中。我通过ID team1_id和team2_id参考这些球队。从我的观点来看,每当我想拉动整个团队的记录时,我都必须每次都找到一个。

我想知道是否有任何方法可以引用这两个团队,而无需经历多对多的关系,还是唯一的方法?这几乎是一个2-Many关系,我知道这并不存在,但我想知道解决这类问题的最佳方法。

谢谢

这是我迁移的快照:

create_table :games do |t| 
    t.datetime "time" 
    t.integer "team1_id" 
    t.integer "team2_id" 


create_table :teams do |t| 
    t.references :city 
    t.references :user 
    t.string "name", :default => "", :null => false 
+0

它有时更想这些东西通过模型而不仅仅是表格。发布你的模型... – 2013-02-13 02:17:14

+0

我的团队和游戏之间没有任何连接。如果我应该有一个连接,它应该是什么? belongs_to:游戏两次?我不认为这会起作用。 – 2013-02-13 02:23:06

+0

是的,最好在模型中建立连接。但我认为已经有一个答案将你带到那里。 – 2013-02-13 02:27:18

回答

3

你有它设置的方式是正确的方式。 在游戏模式让两支球队的引用,TEAM1和TEAM2

class Game 
    belongs_to :team1, class_name: 'Team' 
    belongs_to :team2, class_name: 'Team' 
end 

然后,你可以调用TEAM1在游戏实例的TEAM2,它会拉动团队为您服务。

game = Game.first 
game.team1 
game.team2 

或者你可以从游戏模式掉落TEAM1和TEAM2的ID,并创建一个连接表与游戏和团队,一个你只需要调用“game.teams”

+0

哦,这有效吗? Rails是否理解1和2?我会尝试。 – 2013-02-13 02:24:33

+0

没有,没有按照我的预期工作:NoMethodError:未定义的方法'team1' – 2013-02-13 02:28:41

+0

听起来像你要么改写了一些东西,要么在改变后没有重新加载你的模型。 – cpuguy83 2013-02-13 02:30:36