: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