包含的 Activerecord Force Index
Activerecord Force Index with includes
我正在尝试构建一个强制索引的 ActiveRecord 语句,同时还使用 include。
声明类似于:
Job.from("jobs FORCE INDEX(index1,index2)").includes(:workflow)
然而 AR 似乎不喜欢这样并抛出:
NoMethodError (undefined method `map' for "jobs FORCE INDEX(index1,index2)":Arel::Nodes::SqlLiteral):
有人知道吗?如果取消包含语句,一切正常,所以我假设它正在尝试构建 LEFT OUTER JOIN
和 table 别名查询...
谢谢
M
根据对问题的评论,事实证明 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
我正在尝试构建一个强制索引的 ActiveRecord 语句,同时还使用 include。
声明类似于:
Job.from("jobs FORCE INDEX(index1,index2)").includes(:workflow)
然而 AR 似乎不喜欢这样并抛出:
NoMethodError (undefined method `map' for "jobs FORCE INDEX(index1,index2)":Arel::Nodes::SqlLiteral):
有人知道吗?如果取消包含语句,一切正常,所以我假设它正在尝试构建 LEFT OUTER JOIN
和 table 别名查询...
谢谢 M
根据对问题的评论,事实证明 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