Ruby on rails 使用“两个”与同一模型有一个关系
我正试图找到最好的方法来模拟一场与球队相关的比赛 最终目标是能够调用以下内容:Ruby on rails 使用“两个”与同一模型有一个关系,ruby-on-rails,ruby-on-rails-4,has-many,has-one,Ruby On Rails,Ruby On Rails 4,Has Many,Has One,我正试图找到最好的方法来模拟一场与球队相关的比赛 最终目标是能够调用以下内容: @game.winner @game.loser @team.games 前两种关系正在发挥作用,但第一种关系不起作用。使用has\u many(见下文),我会得到错误:column games.team\u id不存在,我通常会使用与:foreign\u key=>winner\u id等效的任何东西来解决这个问题,但我如何让它同时签出winner\u id和loser\u id 是在团队模型中创建方法的唯一选项
@game.winner
@game.loser
@team.games
前两种关系正在发挥作用,但第一种关系不起作用。使用has\u many(见下文),我会得到错误:column games.team\u id不存在
,我通常会使用与:foreign\u key=>winner\u id
等效的任何东西来解决这个问题,但我如何让它同时签出winner\u id
和loser\u id
是在团队模型中创建方法的唯一选项,如下所示:
def games
won = Game.where(:winner => id)
lost = Game.where(:loser => id)
won + lost
end
到目前为止,我正在做的是:
class Game < ActiveRecord::Base
has_one :winner, class_name: "Team"
has_one :loser, class_name: "Team"
end
class Team
has_many :games
# or something that actually works
end
类游戏
关于这个问题,你没有说太多。但我认为你工作太努力了。如果一个团队可以玩多个游戏,并且一个游戏包含多个团队,那么您需要一个多对多关系。这需要第三个表,最佳实践是一个has\u many:through
关系。它将看起来像:
class Game < ActiveRecord::Base
has_many :teams, through: assignment
has_one :winner, class_name: 'Team', through: :assignment, order: 'score DESC'
has_one :loser, class_name: 'Team', through: :assignment, order: 'score ASC'
end
class Team
has_many :games, through: :assignment
end
class Assignment < ActiveRecord::Base
belongs_to :game
belongs_to :team
end
类游戏
现在你有了赢家和输家的属性,但是你不需要使用自己的方法来计算一个团队的比赛。只需说
team.games.count
和类似的game.teams
是分配给游戏的团队。可能的重复:不,我的是,但我想要两个外键,但实际上可能是一个副本。我会做一些与答案类似的事情,但是,将其作为一个或条件范围来编写,而不是将两个结果连接起来,因此我必须为连接表添加一个迁移?嗯,您确实想要生成一个模型,而不仅仅是一个迁移<代码>rails g模型分配游戏:参考团队:参考