活动记录查询之间的冲突:连接和:包含

时间:2011-03-21 19:41:14

标签: mysql ruby-on-rails

有人可以为下面的查询建议一个简单的解决方法吗?

Workout.all(:joins => [:person, :schedule], 
        :conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ], 
        :order => "time DESC",
        :include => [:person]),

错误消息说 Mysql ::错误:不唯一的表/别名:'people':然后是一个很长的SQL查询

当我从:include选项中删除:person时,代码工作正常。但是,我得到了“n + 1个查询”问题:当我显示锻炼时,它会为每个人生成一个单独的查询。

我假设生成的SQL中的join和include选项中的'people'表冲突。有没有办法使用查找选项对具有活动记录的表进行别名?或者我是否需要为:joins选项使用sql片段,以便我可以使用AS对表进行别名?

我还没有将此应用升级到3.0,所以我不能使用“Class.joins()。where()”语法。

1 个答案:

答案 0 :(得分:2)

您可以从联接中删除:person并将其保留在include中,您可以在:select选项中添加people表中的字段,例如

Workout.all(:joins => [:schedule], 
    :conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ], 
    :order => "time DESC",
    :select => "workouts.*,people.*"
    :include => [:person])