如何在子句呼叫的情况下加入2的响应



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

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

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

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

假设您的两个查询是这样的,那么:

first_names = User.where(:first_name => 'Tobias') # ActiveRecord::Relation
last_names  = User.where(:last_name  => 'Fünke') # ActiveRecord::Relation

如果要使用和(相交),请使用合并:

first_names.merge(last_names)

如果要使用或(Union),使用或(在ActivereCord 5 中或4.2中使用White或backport中的4.2中):

):
first_names.or(last_names)

如果它与某种过滤器相关,则不应使用此方法,因为它具有冗余数据。下一个最糟糕的事情是,您要触发多个查询以获取用户数据。而不是这样做,您可以采用不同的方法。使用查询字符串

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

它将最后使用查询,并将返回您所需的数据。

相关内容

最新更新