Rails 3,无法访问Arel :: SelectManager

时间:2013-03-05 09:06:39

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

我有:except_ids范围的用户模型:

scope :except_ids, ->(*ids) { where { id.not_in ids } }

问题是 - 我不能将它与其他懒惰查询一起使用。例如,如果我这样打电话:

User.except_ids(User.except_ids(1,2))

我最终得到了

TypeError: Cannot visit Arel::SelectManager

我的项目中有更复杂的查询,但一切正常 - 除了范围。 我可以通过用实际代码替换范围来使其工作,但那闻起来。

那么,有什么方法可以找到它吗?

1 个答案:

答案 0 :(得分:2)

如果您想通过单个SQL查询实现此目标,则必须包含subquery,而Arel不直接支持该this workaround,但您可以使用{{3}},例如。

您看到的错误可能是由User.except_ids(1,2)返回ActiveRecord::Relation的实例引起的,这可能是lambda签名中splat运算符的问题。这有效,但会导致2个查询:

User.except_ids(User.except_ids(1,2).map(&:id))