首页 > 解决方案 > 获取rails中集合的关系

问题描述

如此简单,但在rails中找不到如何做到这一点。我有一个特定的用户活动记录集合。类似的东西users = User.where(blabla)。鉴于此集合,是否有一种简单的方法可以获取这些用户拥有的所有帖子?与 User.posts 类似,仅适用于该集合中的所有用户。

帖子属于_to 用户,用户有_many 帖子。

谢谢!

标签: sqlruby-on-railsactiverecord

解决方案


假设您的 Post 模型有一个 user_id 与一个名为“user”的关联,您可以执行以下操作:

Post.where(user_id: User.where(blablah))

或者

Post.joins(:user).where(users: {<user conditions>})

您需要能够对用户条件使用哈希表单才能使用第二个选项。例如:

Post.joins(:user).where(users: {role: 'member'})

如果您的用户查询更复杂,您可以为其创建一个范围:

class User < ApplicationRecord
  scope :special, -> { where(< user conditions go here>) }
end

然后将其与 Post 查询合并:

Post.joins(:user).merge(User.special)

推荐阅读