通过 Rails 中的连接表查找兄弟姐妹

Raynor Kuang

我有具有以下结构的用户、组和成员模型:

class User < ApplicationRecord
  has_many :memberships
  has_many :groups, through: :memberships
end

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

class Membership < ApplicationRecord
  belongs_to :user
  belongs_to :group
end

基本上,Membership 是用户和组的连接表。

给定一个 User user,我如何找到至少属于同一组的同级用户?也就是说,像

user.groups.users # assuming such a line were possible

我想在单个查询中并且仅在 Active Record 中执行此操作,但是如果两个查询更快或更易读,我也可以。(如果有帮助的话,DB 语言是 PSQL。)

帕维尔·米哈尤克

有一些方法可以结合 JOIN 和子选择来获得一个数据库查询,试试这个:

User
  .joins(:memberships)
  .where.not(id: user.id)
  .where(
    memberships: {
      group_id: user.memberships.select(:group_id)})

PS 不要忘记所有 *_id 列上的索引以获得快速查询。
PPS 另一种方式:2 个子选择,1 个 DB 查询。测试哪一个更适合您的要求:

user_groups_rel = user
  .memberships
  .select(:group_id)
groups_users_rel = Membership
  .select(:user_id)
  .where(group_id: user_groups_rel)
User
  .where.not(id: user.id)
  .where(id: groups_users_rel)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过javascript中的兄弟姐妹链接对象

来自分类Dev

通过标签获取最近的兄弟姐妹

来自分类Dev

如何通过打字稿在兄弟姐妹中绑定数据

来自分类Dev

Rails 在父子关系中访问孩子兄弟姐妹的最佳方式

来自分类Dev

如何使用Selenium通过XPath选择兄弟姐妹的孩子?

来自分类Dev

通过使用BeautifulSoup选择所有div兄弟姐妹

来自分类Dev

在 XPath 中查找兄弟姐妹

来自分类Dev

无法通过Express到达父级兄弟姐妹文件夹中js文件的相对路径?

来自分类Dev

Rails通过连接表获取关联计数

来自分类Dev

Rails通过另外2个表连接

来自分类Dev

Rails:在Rake填充Rails中通过验证

来自分类Dev

通过Rails中的关联3

来自分类Dev

通过Rails中的关联3

来自分类Dev

通过Rails中的Ajax渲染

来自分类Dev

xpath 查询以通过搜索值数组来获取其他兄弟姐妹

来自分类Dev

XPath:查找孩子和兄弟姐妹中的首次出现

来自分类Dev

XPath:查找孩子和兄弟姐妹中的首次出现

来自分类Dev

Rails Console通过ID数组查找用户

来自分类Dev

Rails ActiveRecord通过has_many查找

来自分类Dev

Rails通过序列化数组查找

来自分类Dev

Rails:通过相关记录的组合查找记录

来自分类Dev

Rails:通过多个属性查找模型

来自分类Dev

Rails Console通过ID数组查找用户

来自分类Dev

Rails通过序列化数组查找

来自分类Dev

Rails 6:如何删除通过连接表关联的记录而不将其从关联表中删除?

来自分类Dev

Rails:通过迁移填充现有表

来自分类Dev

Rails:在测试环境中无法通过SCSS @import查找资产

来自分类Dev

Rails ActiveRecord通过命名范围中的标签查找问题

来自分类Dev

查找最接近的相似兄弟姐妹

Related 相关文章

热门标签

归档