ruby-on-rails - 使用 Active Record 查找连接表

标签 ruby-on-rails rails-activerecord

我有几个与 :has_many => :through 相关的模型关系:

class User < ActiveRecord::Base
  has_many :group_members
  has_many :groups, :through => :group_members
end

class Group < ActiveRecord::Base
  has_many :group_members
  has_many :users, :through => :group_members
end

class GroupMembers < ActiveRecord::Base
  belongs_to :group
  belongs_to :user
end

使用 ActiveRecord 很容易找到组和用户之间的关系:
groups = @user.groups
users = @group.users

但是如果我想找到一个组和一个用户共享的连接表怎么办?现在我能想到的最佳解决方案是使用类方法。例如,在用户模型中,我有:
def group_member_for(group)
    self.group_members.where(:group_id => group.id).first
end

这工作正常,但我怀疑有一种更清洁的方法。甚至可能是直接使用 ActiveRecord 关联的方法。就像是:
group_member = @user.groups.group_member

最佳答案

您可以简单地执行以下操作:

user.group_members
# and
group.group_members
# or
GroupMember.where(user_id: user.id, group_id: group.id)

关于ruby-on-rails - 使用 Active Record 查找连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384733/

相关文章:

ruby-on-rails - 请求依赖项API期间出现Rails/Error Bundler::HTTPError

mysql - Active Record 精度小数值被截断

ruby-on-rails - 列出关联模型的名称

ruby-on-rails - AWS EC2 Ubuntu 服务器上的 Rails 5 应用程序:Errno::ENOSPC:设备上没有剩余空间

ruby-on-rails - 如何在 UserMailer 中添加一个 before_filter 来检查是否可以向用户发送邮件?

ruby-on-rails - ActiveRecord 随机添加 "DESC"到 ORDER BY

ruby-on-rails - 附加到事件记录关系对象

sql - 包含和条件未给出预期 SQL 的 ActiveRecord 查询

mysql - 在 Rails 模型中使用范围收集 "private"帖子

ruby-on-rails - Rails 3.1 中的 directions_extension 是什么?