Activerecord Force Index包括

时间:2015-04-23 13:16:03

标签: ruby-on-rails ruby-on-rails-3 activerecord arel

我正在尝试构建一个强制索引的ActiveRecord语句,同时也使用includes。

该陈述类似于:

Job.from("jobs FORCE INDEX(index1,index2)").includes(:workflow)
然而,似乎AR不喜欢这样并抛出:

NoMethodError (undefined method `map' for "jobs FORCE INDEX(index1,index2)":Arel::Nodes::SqlLiteral):

有没有人有任何想法?如果include语句被取消,一切正常,所以我假设它正在尝试构建LEFT OUTER JOIN和表别名查询...

由于 中号

1 个答案:

答案 0 :(得分:1)

根据对该问题的评论,结果发现countfromincludes(包含所包含关联的条件)的链上的from调用是个问题。

事实上,即使只是from("jobs")使用includes调用也会导致问题,因此强制索引有点像红色鲱鱼。

在这种情况下,我无法找到使用joins的解决方案(需要计数)。但是,如果您要包含关联并为其添加条件,那么includes应该等同于 q = Job.from("jobs FORCE INDEX(index1,index2)") q = q.joins(:workflow) q = q.where("workflows.name = 'Bob'") q.count (我认为!)。在这种情况下,以下情况应该有效(我已将其分解为使其更加明显的步骤):

includes

如果您确实需要 q = Job.from("jobs FORCE INDEX(index1,index2)") q = q.joins("left outer join workflows on workflows.job_id = jobs.id") q = q.where("workflows.name = 'Bob'") q.count 提供的左外部,那么您可以手动指定:

 item['rating'] = site.xpath('div[@class="review-info-star-rating"]/aria-label/text()').extract()