Ruby on rails 通过多个来源获得了许多信息
我正试图创建一个与多个来源有着千丝万缕联系的Ruby on rails 通过多个来源获得了许多信息,ruby-on-rails,Ruby On Rails,我正试图创建一个与多个来源有着千丝万缕联系的 例如,一场比赛有主队和客队,而一场锦标赛有多场比赛 什么是最好的方式,让所有的球队在比赛中使用一个有很多通过比赛的关系 现在,我的代码如下所示: class Tournament has_many :teams, :through => :games, :source => :home_team, :uniq => true end class Tournament has_many :games has_many :
例如,一场比赛有主队
和客队
,而一场锦标赛有多场比赛
什么是最好的方式,让所有的球队在比赛中使用一个有很多通过比赛的关系
现在,我的代码如下所示:
class Tournament
has_many :teams, :through => :games, :source => :home_team, :uniq => true
end
class Tournament
has_many :games
has_many :teams, :through => :games
end
class Game
belongs_to :torunament
belongs_to :team
end
class Team
has_many :games
has_many :tournaments, :through => :games
end
但我想用某种方式让它表现得像:
class Tournament
has_many :teams, :through => :games, :source => [:home_team, :away_team], :uniq => true
end
编辑:多对多关系不是我的问题。假设结构如下,有没有一个好方法可以让所有参赛球队都参加比赛
class Game
has_and_belongs_to_many :tournaments
belongs_to :home_team, :class_name => Team, :foreign_key => :home_team_id
belongs_to :away_team, :class_name => Team, :foreign_key => :away_team_id
end
class Tournament
has_and_belongs_to_many :games
end
有没有一种方法可以进行锦标赛。团队?定义如下模型:
class Tournament
has_many :teams, :through => :games, :source => :home_team, :uniq => true
end
class Tournament
has_many :games
has_many :teams, :through => :games
end
class Game
belongs_to :torunament
belongs_to :team
end
class Team
has_many :games
has_many :tournaments, :through => :games
end
然后呼叫控制器,或在任何地方:
tournament.teams
编辑:
您可以在您的锦标赛
模型中为此类问题定义范围
。这更像是一些定制查询,而不是rails开箱即用的支持。或者至少我现在记不起来了
你可以看看如何使用它们
您可以建立一个查询,以获取所有团队。你可以创建任何你喜欢的查询。在花了一些时间试图找到一个内置的解决方案之后,我刚刚编写了一个名为“游戏中的团队”的自定义查询。它通过team_1和team_2两次加入球队参加比赛,并检查比赛id列表中是否有任何一个在这两次加入中
这个解决方案不是很好,因为它需要多个查询(其中一个只是所有游戏ID的一个巨大列表),但我花了很多时间试图想出另一种方法,但没有。至少这种方法是有效的
我想学一种更好的方法
游戏内部代码:
def self.teams
joined_tables = Team.joins(:home_team).joins(:away_team)
joined_tables.where('games.id in (?) or away_team_games.id in (?)',
select(:id), select(:id)).uniq
end
在这个例子中,一场比赛只有一支球队,或者我遗漏了什么?哦,是的,你完全正确。在速度上我忽略了这一点。谢谢你指点我。我喜欢有人把-1
放进去,却没有理由放进去。其中接受的解决方案有一个丑陋的自定义查询。我没有投你反对票,但公平地说,你的回答没有像我之前的评论所指出的那样接近于回答我的问题。我不认为没有丑陋的质疑就有办法做到这一点。不确定情况是否仍然如此,因为我已经有一段时间没有使用rails了。是的,好的,我知道了。从某种意义上说,我没有使用过你的模型名,比如away\u team
和home\u team
,我现在可以看到,但是在Rails中,如果你像下面那样编写查询,那么你肯定知道你走错了路,与Rails一样,大多数情况下,一切都可以以干净、友好的方式完成。有一个类似的问题,最终改变了我的模式以解决它,但我看到的一个选项是使用。merge
Edit:进一步考虑它,我打赌rails的方法是单表继承,主客场游戏都有一个父抽象类Game
,提供连接表。下次我会试试:)