Rails合并两个查询结果,然后再次查询

时间:2016-07-21 12:36:46

标签: ruby-on-rails activerecord rails-activerecord

假设我有两个查询,如

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)

然后我需要添加两个查询的结果,然后再次查询。

3 个答案:

答案 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个查询。