ruby-on-rails - 如何组合来自两个不同模型的查询
问题描述
我有三个看起来像这样的模型
- 推特
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
- 转发
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
- 用户
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 的集合?如果是这样,怎么做?
解决方案
推荐阅读
- c# - WPF 如何解决相同的 ElementName 问题?
- python - 用 html 实体替换重音字符
- mysql - 如何将可为空的列添加为表的主复合键的一部分?
- javascript - d3 控制台不显示错误但图表未呈现
- http - 使用 Angular 5 http.post() 通过休息端点获取数据
- node.js - 在 Angular2 应用程序的前端存储对象实例数据是否可以接受?
- google-api - Google book API 限制和 api 密钥
- date - 如何在 Groovy 中专门格式化日期/时间
- python - 在 os.chdir() 之后无法导入模块
- kdb - 加入字典以制作表格