【发布时间】:2012-04-02 15:51:24
【问题描述】:
我正在开发一个基于 Rails 的 Web 服务,该服务提供有关各种运动队赛程的数据。我的模型包括以下内容:
- 每条比赛记录都有一个“主场”和一个“客场”球队,每个球队都引用了一个球队记录
- 每个 Team 记录都属于一个 Division 记录
我已经将游戏建模如下:
class Game < ActiveRecord::Base
# Miscellaneous validations here
belongs_to :home_team, :class_name => Team
belongs_to :away_team, :class_name => Team
# Other stuff follows
end
这是团队的模型:
class Team < ActiveRecord::Base
# Miscellaneous validations here
belongs_to :division
# Other stuff follows
end
这是Division的模型:
class Division < ActiveRecord::Base
# Miscellaneous validations here
has_many :teams, :dependent => :destroy
# Other stuff follows
end
我正在尝试执行返回所有主队和客队都来自特定分区的比赛的请求。在伪代码中,我想要类似:
SELECT games.* FROM games WHERE
"The division ID of the home team" = '1' AND
"The division ID of the away team" = '1'
我使用 joins 方法尝试了各种化身,但没有一个对我有用。我最接近的是:
games = Game.joins(:home_team, :away_team).where(
:home_team => {:division_id => params[:division_id]},
:away_team => {:division_id => params[:division_id]})
但这给了我一个错误:
SQLite3::SQLException: no such column: home_team.division_id: SELECT "games".* FROM "games" INNER JOIN "teams" ON "teams"."id" = "games"."home_team_id" INNER JOIN "teams" "away_teams_games" ON "away_teams_games"."id" = "games"."away_team_id" WHERE "home_team"."division_id" = '1' AND "away_team"."division_id" = '1'
显然,我对特定 home_team 和 away_team 的语法不起作用,因为它没有将它们映射到“teams”的有效表名。但我想出的任何其他连接变体似乎让我离我想要的更远。
如果您能提供任何帮助或参考向我展示如何执行此类操作的文档,我将不胜感激。
【问题讨论】:
标签: ruby-on-rails activerecord