我有:except_ids
范围的用户模型:
scope :except_ids, ->(*ids) { where { id.not_in ids } }
问题是 - 我不能将它与其他懒惰查询一起使用。例如,如果我这样打电话:
User.except_ids(User.except_ids(1,2))
我最终得到了
TypeError: Cannot visit Arel::SelectManager
我的项目中有更复杂的查询,但一切正常 - 除了范围。 我可以通过用实际代码替换范围来使其工作,但那闻起来。
那么,有什么方法可以找到它吗?
答案 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))