samedi 11 juillet 2015

How to check if polymorphic rails has_many collection contains x elements

I have four models:

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

I am trying to define a method that checks if a group exists with x members(members can be user or caretaker).

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

My issue is that members are polymorphic so I cant quite figure out how best to structure the active record query.

my classes are:

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

Aucun commentaire:

Enregistrer un commentaire