我相信我的措辞不是很好,这解释了为什么我在搜索失败。我试图找出如何识别与其他两个相关的记录。例子会使它更清晰。如何识别包含Ruby on Rails相关记录的模型?
模型比赛 has_many与结果。结果有一个团队号码(但可以使用字母作为清晰度)
因此,在此示例中,我试图找出A队和D队都参加过的所有比赛。
我想找回所有符合这个条件的比赛的调查员,然后我可以将两个队伍相互比较。
我很抱歉,这不是最好的写作,我正在努力的条款来定义我想要做的事情。感谢您的帮助,时间和耐心!
我相信我的措辞不是很好,这解释了为什么我在搜索失败。我试图找出如何识别与其他两个相关的记录。例子会使它更清晰。如何识别包含Ruby on Rails相关记录的模型?
模型比赛 has_many与结果。结果有一个团队号码(但可以使用字母作为清晰度)
因此,在此示例中,我试图找出A队和D队都参加过的所有比赛。
我想找回所有符合这个条件的比赛的调查员,然后我可以将两个队伍相互比较。
我很抱歉,这不是最好的写作,我正在努力的条款来定义我想要做的事情。感谢您的帮助,时间和耐心!
考虑:
class Contest < ApplicationRecord
has_many :results
has_many :teams, through: :results
end
class Result < ApplicationRecord
has_many :teams
belongs_to :contest
end
class Team < ApplicationRecord
belongs_to :result
delegate :contest, to: :result
end
这将设置你的协会,并让你从Team
访问Contest
。 delegate
方法说:“如果我拨打team.contest
,请改为team.result.contest
”。
希望有帮助!
编辑
如果你想收集的比赛:
Contest.joins(results: :teams).where(teams: { id: team_a.id })
Contest.joins(results: :teams).where(teams: { id: team_b.id })
问题是你需要与A队参加同一个表两次,一次结果和一次与团队B的结果。您需要将它们作为单独的表格引用。您可以使用阿雷尔和分配唯一的名称表中的两个实例。
contests_between = Arel::Table.new(:contests, as: 'contests_between')
team_a_results = Arel::Table.new(:results, as: team_a_results)
team_b_results = Arel::Table.new(:results, as: team_b_results)
relation = contests_between.project(Arel.sql('*')).
join(team_a_results).on(contests_between[:id].eq(team_a_results[:contest_id])).
join(team_b_results).on(contests_between[:id].eq(team_b_results[:contest_id]))
And then you can do...
relation = relation.where(team_a_results[:team_id].eq(1)).where(team_b_results[:team_id].eq(2))
@contests = relation.to_sql
# above assumes team_a is id 1 and team_b is id 2... if the teams are already loaded you could substitute team_a.id and team_b.id
感谢您!我应该列入包括我已经建立了模型,但现在很高兴我没有!我不知道在模型中的代表,总是用“通过:”选项底部的代码是非常赞赏的回答这个问题为好,感谢你,我给它一个去! – MechDog