5

: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
4

1 に答える 1

7

次の操作を簡単に実行できます。

user.group_members
# and
group.group_members
# or
GroupMember.where(user_id: user.id, group_id: group.id)
于 2013-01-17T17:31:17.043 に答える