Skip to content

Instantly share code, notes, and snippets.

@bluescreen303
Created June 3, 2009 15:07
Show Gist options
  • Save bluescreen303/123029 to your computer and use it in GitHub Desktop.
Save bluescreen303/123029 to your computer and use it in GitHub Desktop.
class Group < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
has_many :users, :through => :memberships
named_filter :moderated do
having(:memberships).with(:state, 'moderator')
end
named_filter :with_pending_memberships do
having(:memberships).with(:state, 'pending')
end
end
class User < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
has_many :groups, :through => :membership
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
> Group.moderated.with_pending_memberships
SELECT "groups".* FROM "groups" INNER JOIN "memberships" AS groups__memberships ON "groups".id = groups__memberships.group_id WHERE ((groups__memberships.state = 'pending') AND (groups__memberships.state = 'moderator'))
=> []
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment