0

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

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

问题是 - 我不能将它与另一个惰性查询一起使用。例如,如果我这样称呼:

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

我最终得到

TypeError: Cannot visit Arel::SelectManager

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

那么,有没有什么办法可以查出来呢?

4

1 回答 1

2

如果您想通过单个 SQL 查询来实现这一点,它必须包含一个子查询,Arel 不直接支持,但您可以使用这种解决方法,例如。

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

User.except_ids(User.except_ids(1,2).map(&:id))
于 2013-03-22T10:21:04.507 回答