我有几个与: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