假设我有两个查询,如
users = User.where("name =?", 'john')
active_johns = users.where("active =?", true)
现在我必须结合两个查询的结果,然后对结果执行另一个查询,如下所示
users = users + active_johns
users = users.where("role = ?", 'admin')
这不起作用,我收到错误
NoMethodError (undefined method `where' )
那么如何将两个结果组合起来然后执行另一个查询结果呢?
修改
我真的需要添加两个查询的结果。我的情况有点复杂,我不能对两个查询使用单个查询
users = User.where("name =?", 'john')
active_johns = users.where("active =?", true)
然后我需要添加两个查询的结果,然后再次查询。
答案 0 :(得分:0)
你可以这样做:
User.where("name =?", 'john').where("active =?", true).where("role = ?", 'admin')
或者,如果您确实需要两个查询的结果,那么只有最终结果:
users = User.where("name =?", 'john').where("active =?", true)
admin_users = users.where("role = ?", 'admin')
答案 1 :(得分:0)
你看完了吗
users = User.where("name =?", 'john')
active_johns = users.where("active =?", true)
users.merge(active_johns)
答案 2 :(得分:0)
执行以下操作时:
users = users + active_johns
结果是Array
,而不是ActiveRecord::Association
。您无法对where
执行Array
查询。这就是你得到的原因
NoMethodError (undefined method `where' )
正如@baxang在评论中建议的那样,你应该使用以下查询来获得你想要的东西:
User.where(name: 'John', active: true, role: 'admin')
这应该会为您提供名为' John'的所有活跃管理员用户。我觉得这是最好的选择,没有更多细节,为什么你需要运行2个查询。