Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 活动记录查询:联接和:包含之间的冲突_Mysql_Ruby On Rails - Fatal编程技术网

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

Mysql 活动记录查询:联接和:包含之间的冲突,mysql,ruby-on-rails,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::错误:不是

有人能为下面的问题提供一个简单的解决方案吗

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中发生冲突。是否有方法使用“查找”选项为具有活动记录的表别名?或者我是否需要为:joins选项使用sql片段,以便将表别名为AS


我尚未将此应用升级到3.0,因此无法使用“Class.joins().where()”语法。

您可以从连接中删除: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])

谢谢,这就成功了,尽管我很难理解为什么。将人员放入:include生成一个左侧外部联接,该联接应返回所有训练,而不仅仅是那些有与该人员匹配的人员的训练。健身房id条件,对吗?但它确实有效。