我正在尝试构建一个强制索引的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
和表别名查询...
由于 中号
答案 0 :(得分:1)
根据对该问题的评论,结果发现count
对from
和includes
(包含所包含关联的条件)的链上的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()