【发布时间】:2015-04-23 13:16:03
【问题描述】:
我正在尝试构建一个强制索引的 ActiveRecord 语句,同时还使用包含。
语句看起来像:
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 和表别名查询...
谢谢 M
【问题讨论】:
-
似乎在 rails 4 中工作正常。可能值得探索从 rails 3 和 rails 4 之间的差异(api.rubyonrails.org/v3.2.11/classes/ActiveRecord/… 和 api.rubyonrails.org/classes/ActiveRecord/…)
-
嗨沙德威尔。它工作正常,除非 activerecord 必须基于其中一个包含执行查询。所以更完整的例子是 Job.from("jobs FORCE INDEX(index1,index2)").includes(:workflow).where("workflows.name = 'Bob'")...
-
您需要添加一个
references呼叫:where("workflows.name = 'Bob'").references('workflows') -
嗨 Shadwell - 谢谢,我想可能是这样,但我们使用的是 Rails 3.2.19; Rails 3有什么可以支持它的吗?谢谢
-
不,完全被难住了。我现在已经在 rails 3 上尝试过了,它对我来说也很好用。您需要发布完整的堆栈跟踪。是否有可能您正在使用已扩展的
Job类或不是 ActiveRecord 类?
标签: ruby-on-rails ruby-on-rails-3 activerecord arel