Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails 3,无法访问Arel::SelectManager_Ruby On Rails 3_Activerecord_Scope_Rails Activerecord_Arel - Fatal编程技术网

Ruby on rails 3 Rails 3,无法访问Arel::SelectManager

Ruby on rails 3 Rails 3,无法访问Arel::SelectManager,ruby-on-rails-3,activerecord,scope,rails-activerecord,arel,Ruby On Rails 3,Activerecord,Scope,Rails Activerecord,Arel,我的用户模型带有:除了\u id范围: scope :except_ids, ->(*ids) { where { id.not_in ids } } 问题是-我不能将它用于另一个懒惰的查询。例如,如果我这样称呼: User.except_ids(User.except_ids(1,2)) 我最终得到了 TypeError: Cannot visit Arel::SelectManager 我的项目中有更复杂的查询,但除了范围之外,一切都很好。 我可以通过用实际代码替换作用域来实现它

我的用户模型带有
:除了\u id
范围:

scope :except_ids, ->(*ids) { where { id.not_in ids } }
问题是-我不能将它用于另一个懒惰的查询。例如,如果我这样称呼:

User.except_ids(User.except_ids(1,2))
我最终得到了

TypeError: Cannot visit Arel::SelectManager
我的项目中有更复杂的查询,但除了范围之外,一切都很好。 我可以通过用实际代码替换作用域来实现它,但这很难闻


那么,有没有办法找到答案呢?

如果您想通过一个SQL查询来实现这一点,它必须包含一个,Arel不直接支持它,但您可以使用

您看到的错误可能是由以下事实引起的:
用户。除了id(1,2)
返回
ActiveRecord::Relation
的实例,这可能是lambda签名中的splat运算符的问题。这是可行的,但会导致两个查询:

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

问题是,map(&:id)将为括号内的关系加载结果。我所有操作的要点都是生成一个巨大的查询。为了提高双查询解决方案的效率,请使用pull而不是map:
User.except\id(User.except\id(1,2).pull('id'))
。这将生成一个
SELECT id
而不是
SELECT*
,并以仅包含id的数组形式返回它。