如何连接2 where子句调用的响应?

时间:2017-12-19 04:24:29

标签: ruby-on-rails rails-activerecord

我想返回一组用户,并合并两个不同查询的结果。

我目前有这个,但我没有看到正确的结果

def get_abc()
  users = User.where("....")
  users << User.where("...")
  users
end

这是结合2个不同查询结果的正确方法吗?

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

它将最后使用查询并返回您想要的数据。