Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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 不明确的列';id';在ActiveRecord查询中_Mysql_Ruby On Rails_Activerecord - Fatal编程技术网

Mysql 不明确的列';id';在ActiveRecord查询中

Mysql 不明确的列';id';在ActiveRecord查询中,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,我有一些复杂的ActiveRecord(2.3.8)模型(不是真的,有些关联和命名范围,还有一个缓存值),在我的应用程序中,我看到以下MySQL(5.1)查询出现: SELECT `cases`.id FROM `cases` INNER JOIN `contracts` ON `cases`.contract_id = `contracts`.id WHERE ((case_status_id = 0 AND case_status_id IS NOT NULL) AND id = XXXX)

我有一些复杂的ActiveRecord(2.3.8)模型(不是真的,有些关联和命名范围,还有一个缓存值),在我的应用程序中,我看到以下MySQL(5.1)查询出现:

SELECT `cases`.id FROM `cases`
INNER JOIN `contracts` ON `cases`.contract_id = `contracts`.id
WHERE ((case_status_id = 0 AND case_status_id IS NOT NULL) AND id = XXXX)
AND ((`cases`.`archived` = 0)
AND ((`contracts`.customer_id = XXXX)))
LIMIT 1
显然不是最可读的查询。有时ActiveRecord抱怨列“id”不明确,我不得不同意:-)

但是,只有当数据库中的数据是“稀疏”时,才会发生这种情况。我们有一个填充这些表的导入脚本,插入的数据越多,这些错误发生的频率就越低

触发异常的代码:

paginate_options = {:page => params[:page], :per_page => 25 }
options = paginate_options.merge(:include => [:active_status, :case_summary], :order => @sortable.order)
@cases = current_customer.cases.unarchived.paginate(options)
缓存“活动状态”字段的位置:

belongs_to    :active_status, 
            :class_name   => "CaseStatus", 
            :foreign_key  => 'case_status_id'
caches_value  :case_status_id, 
            :sql => 'SELECT id FROM case_statuses WHERE case_id = #{id} ORDER BY id DESC LIMIT 1'
stacktrace如下所示:

config/initializers/connection_fix.rb:  17:in `execute'
vendor/plugins/cached_values/lib/cached_value.rb:  91:in `update_cache'
vendor/plugins/cached_values/lib/cached_value.rb:  14:in `load'
vendor/plugins/cached_values/lib/cached_values.rb:  85:in `case_status_id'
plugins/will_paginate/lib/will_paginate/finder.rb:  82:in `paginate'
plugins/will_paginate/lib/will_paginate/collection.rb:  85:in `create'
plugins/will_paginate/lib/will_paginate/finder.rb:  76:in `paginate'
因此,我假设第一次尝试刷新缓存时会发生此错误。该查询似乎由cached_values插件使用,并且位于will_paginate语句中,但该语句中使用的缓存查询没有出现在上面的查询中

我也不明白为什么ActiveRecord会在还有一个
id=XXXX
语句的情况下查询
cases.id
。我假设两个查询都是同一个
id
,但同样地,非常模糊


我能告诉ActiveRecord使用显式表名吗?还是调试此查询构造方式的方法?“cached_values”插件是否可能受命名作用域的影响?是否有办法解决此问题?

您可以演示如何使用生成此查询的代码吗?包括控制器和模型的片段。