首页 > 解决方案 > 查找与 current_user 在同一组中的用户关联的所有记录

问题描述

我的模型:用户、组、GroupsUser 和可用性。

我想查找与一个或多个组关联的用户创建的所有可用性。

class Availability < ApplicationRecord
  belongs_to :user
end

class User < ApplicationRecord
  has_many :group_users
  has_many :groups, through: :group_users

  has_many :availabilities
end

class Group < ApplicationRecord
  has_many :group_users
  has_many :users, through: :group_users
end

class GroupUser < ApplicationRecord
  belongs_to :group
  belongs_to :user
end

这是我试图找到由与第一个用户在同一组中的用户创建的所有可用性的内容。如何进行此查询?

user = User.first

Availability.joins(:user).where('user.groups.pluck[:id] IN (?)', user.groups.pluck[:id])

将范围放在 Group 上也很好,但每次我这样做都会引发错误。

标签: ruby-on-railsrubypostgresql

解决方案


有两种选择:

1)通过加入

Availability.joins(user: :groups).distinct

2)通过子查询

Availability.where(user_id: User.joins(:groups).distinct.pluck(:id))

如果您需要使用特定组过滤可用性,您可以添加.where(groups: { name: 'Group name' })条件


推荐阅读