首页 > 解决方案 > 如何组合来自两个不同模型的查询

问题描述

我有三个看起来像这样的模型

  1. 推特
    class Twit < ApplicationRecord
      belongs_to :user
    
      has_many :retwits, foreign_key: :twit_id, class_name: "Retwit", dependent: :destroy
    
      has_many :mentions, dependent: :destroy
      
      validates :body, presence: true, length: { maximum: 280 }
    end
  1. 转发
    class Retwit < ApplicationRecord
      belongs_to :twit, foreign_key: :twit_id, class_name: 'Twit' 
      belongs_to :retwiter, foreign_key: :retwiter_id, class_name: 'User'
      
      validates :twit, uniqueness: { scope: :retwiter }
    end
  1. 用户
    class User < ApplicationRecord
    has_many :twits, dependent: :destroy
    has_many :retwits, foreign_key: :retwiter_id, class_name: 'Retwit', dependent: :destroy
    end

我想查询 Twits 和 Retwits where (twit.user = some_user 或 retwit.retwiter = some_user)。我正在使用此代码进行查询,但是它变成了一个数组,因此我无法在其上使用 ActiveRecords 集合方法:

    (Twit.where(user: people) + Retwit.where(retwiter: people))

我希望能够像这样使用 ActiveRecords 收集方法:


    (Twit.where(user: people) + Retwit.where(retwiter: people)).offset(0).limit(5)

这不起作用,因为将两个查询加在一起会返回一个数组。是否可以在一个查询中返回 Twits 和 Retwits 的集合?如果是这样,怎么做?

标签: ruby-on-railsrubypostgresqlactiverecord

解决方案


推荐阅读