【问题标题】:Rails: Select records from database with same foreign keys as current userRails:从数据库中选择与当前用户具有相同外键的记录
【发布时间】:2017-02-27 16:07:52
【问题描述】:

我的应用有三个表:Users、Organizations 和 UserOrganizations。最后一个表包含 user_id 和 organization_id。因此,每个用户都可以拥有多个组织。

我现在要做的是选择user_organization表中与当前用户具有相同organization_id的所有用户。

所以 e. G。如果当前用户属于 ID 为 3、6 和 8 的组织,我想选择属于同一组织的所有用户。

这个问题可能既愚蠢又简单,但我现在已经坚持了好几个小时。 :-/

谢谢

user.rb

has_many :user_organizations
has_many :organizations, through: :user_organizations

organization.rb

has_many :user_organizations
has_many :users, through: :user_organizations

user_organization.rb

belongs_to :organization
belongs_to :user

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    你可以像这样遍历连接表

    UserOrganization.includes(:user) .where(organization: current_user.organizations) .map(&:user)

    这里的好处是,通过添加includes,您向 ActiveRecord 暗示您将需要该用户,它使查询更有效率。只要您的连接表模型具有belongs_to(您的),它就应该在没有includes 的情况下工作。但是如果没有includes,如果您使用map(&:user),它将进行 N 次查询以获取用户数据(其中 N 是匹配的用户数),而不是使用数据库连接在第一个查询中获取该数据。

    【讨论】:

      【解决方案2】:

      试试:

      user_organizations = current_user.organizations
      users_from_same_organization = User.where(organizations: user_organizations)
      

      【讨论】:

      • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多