0

我有四个型号:如何检查是否多形导轨的has_many集合包含X元素

User (users) 
Caretaker (a completely different type of user) 
MessageGroup (a group) 
MessageGroupMembership (a join table between MessageGroup and (Users && Caretakers)) 

我试图定义来检查,如果一组X的成员存在的方法(成员可以是用户或看护人) 。

def group_containing(members) 
    # return group if a MessageGroup exists whose members have the members 
    # passed in and those member only. No more. No less. 
end 

我的问题是,成员是多态的,所以我不能完全弄清楚如何最好地构造活动记录查询。

我的类别是:

class User < ActiveRecord::Base 
    has_many :message_group_memberships 
    has_many :message_groups, through: :message_group_memberships 
end 

class Caretaker < ActiveRecord::Base 
    has_many :message_group_memberships 
    has_many :message_groups, through: :message_group_memberships 
end 

class MessageGroupMembership < ActiveRecord::Base 
    belongs_to :member, polymorphic: true 
    belongs_to :message_group 
end 

class MessageGroup < ActiveRecord::Base 
    has_many :message_group_memberships 
    has_many :members, through: :message_group_memberships 
    has_many :messages 

    def group_containing(members) 
    # method goes here. 
    end 
end 

回答

0
def group_containing(members) 
    member_ids = members.map(&:id) 
    MeesageGroup.joins(:message_group_memberships).where({:message_group_memberships => member_ids}) 
end 

试试这个

+0

感谢您的帮助,但members.id没有定义。通过的成员是一组成员。 – Nick

+0

@Nick现在检查更新的代码 –

相关问题