使用Active Record查找连接表

时间:2013-01-17 17:29:22

标签: 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

但是,如果我想找到一个组和一个用户共享的连接表怎么办?现在我能想到的最好的解决方案是使用类方法。例如,在User模型中我有:

def group_member_for(group)
    self.group_members.where(:group_id => group.id).first
end

这很好用,但我怀疑有一个更清洁的方法。甚至可能是直接使用ActiveRecord关联的方法。类似的东西:

group_member = @user.groups.group_member

1 个答案:

答案 0 :(得分:7)

您可以执行以下操作:

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