2011-03-21 66 views
1

任何人都可以为下面的查询提出一个简单的修复?活动记录之间的查询冲突:连接和:包括

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

错误消息指出的Mysql ::错误:没有唯一的表/别名:“人”:然后很长的SQL查询

当我删除:人从:包括选择,代码工作正常。然而,然后我得到了“n + 1查询”问题:当我显示锻炼时,它会为每个人生成一个单独的查询。

我假设来自连接和包含选项的'people'表在生成的SQL中发生冲突。有没有办法使用查找选项为具有活动记录的表别名?或者我需要使用sql片段作为:joins选项,以便我可以使用AS为表格添加别名?

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

回答

2

您可以删除:人从加入,并保持它在包括可以从人表中添加字段:选择选项如

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

谢谢,并获得成功,但我有一个很难理解为什么。将人放入:include会生成一个左外连接,它应该返回所有锻炼,而不仅仅是那些与person.gym_id条件匹配的人,对吧?但它确实有效。 – 2011-03-21 23:01:34