我想返回一组用户,并合并两个不同查询的结果。
我目前有这个,但我没有看到正确的结果
def get_abc()
users = User.where("....")
users << User.where("...")
users
end
这是结合2个不同查询结果的正确方法吗?
答案 0 :(得分:2)
让我们假设您的两个查询是这样的,然后:
first_names = User.where(:first_name => 'Tobias') # ActiveRecord::Relation
last_names = User.where(:last_name => 'Fünke') # ActiveRecord::Relation
如果要使用AND(交集)进行组合,请使用merge:
first_names.merge(last_names)
如果要使用OR(联合)进行组合,请使用或(在ActiveRecord 5+中可用,或在4.2中通过where或backport):
first_names.or(last_names)
答案 1 :(得分:0)
如果它与某种过滤器有关,那么你不应该使用这种方法,因为它会有冗余数据。接下来最糟糕的是你正在触发多个查询来获取用户数据。而不是这样做你可以采用不同的方法。 使用查询字符串
condition = "first_name = :first_name "
attributes = { first_name: 'xyz'}
condition = " And/Or last_name = :lastname" if your_other_condition?
attributes[:lastname] = 'abc'
users = User.where(condition, attributes)
另一种方法可以在范围的帮助下(我想你正在过滤数据)
users = User.where("...")
users = users.scope1 if any condition
它将最后使用查询并返回您想要的数据。