
Untitled
By: a guest on
May 11th, 2012 | syntax:
None | size: 2.49 KB | hits: 19 | expires: Never
named_scope :lead_managers, lambda { |lead_managers_array|
{ :joins => :lead_managers,
:conditions => ['lead_manager_offerings.underwriter_id in (?)', lead_managers_array],
:group => 'offerings.id',
:having => ['count(DISTINCT lead_manager_offerings.underwriter_id) = ?', lead_managers_array.length] }
}
named_scope :co_managers, lambda { |co_managers_array|
{ :joins => :co_managers,
:conditions => ['co_manager_offerings.underwriter_id in (?)', co_managers_array],
:group => 'offerings.id',
:having => ['count(DISTINCT co_manager_offerings.underwriter_id) = ?', co_managers_array.length] }
}
>> Offering.find(19671).lead_managers.each { |x| puts x.id }
200
204
>> Offering.find(19671).co_managers.each { |x| puts x.id }
202
203
>> Offering.lead_managers([200, 204]).co_managers([202]).each {|x| puts x.id}
19671
20188
Offering Load (259.5ms) SELECT "offerings".* FROM "offerings" INNER JOIN "co_manager_offerings" ON ("offerings"."id" = "co_manager_offerings"."offering_id") INNER JOIN "underwriters" ON ("underwriters"."id" = "co_manager_offerings"."underwriter_id") INNER JOIN "lead_manager_offerings" ON ("offerings"."id" = "lead_manager_offerings"."offering_id") INNER JOIN "underwriters" lead_managers_offerings ON ("lead_managers_offerings"."id" = "lead_manager_offerings"."underwriter_id") WHERE ((co_manager_offerings.underwriter_id in (202)) AND (lead_manager_offerings.underwriter_id in (200,204))) GROUP BY offerings.id HAVING count(DISTINCT lead_manager_offerings.underwriter_id) = 2
##
>> Offering.lead_managers([200, 204]).co_managers([202,203]).each {|x| puts x.id}
19671
20188
Offering Load (247.8ms) SELECT "offerings".* FROM "offerings" INNER JOIN "co_manager_offerings" ON ("offerings"."id" = "co_manager_offerings"."offering_id") INNER JOIN "underwriters" ON ("underwriters"."id" = "co_manager_offerings"."underwriter_id") INNER JOIN "lead_manager_offerings" ON ("offerings"."id" = "lead_manager_offerings"."offering_id") INNER JOIN "underwriters" lead_managers_offerings ON ("lead_managers_offerings"."id" = "lead_manager_offerings"."underwriter_id") WHERE ((co_manager_offerings.underwriter_id in (202,203)) AND (lead_manager_offerings.underwriter_id in (200,204))) GROUP BY offerings.id HAVING count(DISTINCT lead_manager_offerings.underwriter_id) = 2
>> Offering.find(20188).lead_managers.collect { |x| x.id}
=> [204, 200]
>> Offering.find(20188).co_managers.collect { |x| x.id}
=> [205, 206, 198, 202, 199, 208]