【问题标题】:Combine two ActiveRecord Query results合并两个 ActiveRecord 查询结果
【发布时间】:2011-04-05 09:00:17
【问题描述】:

我目前有两个活动记录查询,我想将它们组合在一起

joins("在 user_id = follow_id 上加入关系"). where("follower_id = #{user.id}")

其中(:user_id => user.id)

基本上,我希望第二个结果与第一个相似,类似于 SQL 中的 UNION 语句。可以这样在ActiveRecord中完成吗?

我更喜欢使用联合,而不是必须将所有followed_ids 加入一个字符串并在sql 中使用IN 子句。

有什么想法吗?

-----编辑------ 我正在寻找一种方法来让它与延迟加载一起工作

【问题讨论】:

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


    【解决方案1】:

    使用relation & relation:

    Model.joins("join relationships ON user_id = followed_id").where("follower_id = {user.id}") & Model.where(:user_id => user.id)
    

    【讨论】:

    • 这迫使 ActiveRecord 急切地将结果放入一个数组中。这可以通过延迟加载来完成吗?
    • ActiveRecord::Relation 上的& 方法是merge 的别名,从 Rails 3.0.9 开始,该别名已被删除。正是因为@MikeJohnson 指出的混淆,它被删除了:它不是合适的运算符。请改用relation.merge(other_relation)
    • @zzawaideh 只是想知道您是否知道如何解决这个问题我正在尝试检索两个表,但需要它作为 ActiveRecord::Relation 而不是数组。任何帮助将不胜感激
    • 哇,所以“合并”用 AND 将它们放在一起。什么是 OR 等价物?
    • @Neil 在 Rails 存储库中观看此问题:github.com/rails/rails/pull/9052
    【解决方案2】:

    这对我很有用:

    Model.where(...) | Model.where(...)
    

    【讨论】:

    • 你救了我在这里。谢谢朋友
    • 这会将 ActiveRecord_Relation 转换为 Array 对象。您不能在结果对象上应用 .where 等活动记录方法
    【解决方案3】:

    这对我很有用:

    Rails/ActiveRecord 的更新版本可能原生支持这种语法。它看起来类似于:

    Model.where(foo: 'bar').or.where(bar: 'bar')
    

    或者您也可以,只需坚持以下方法即可:

    Model.where('foo= ? OR bar= ?', 'bar', 'bar')
    

    参考了这个link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2016-10-27
      • 2013-07-25
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多