Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 11th, 2012  |  syntax: None  |  size: 2.49 KB  |  hits: 19  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. named_scope :lead_managers, lambda { |lead_managers_array|
  2.     { :joins => :lead_managers,
  3.       :conditions => ['lead_manager_offerings.underwriter_id in (?)', lead_managers_array],
  4.       :group => 'offerings.id',
  5.       :having => ['count(DISTINCT lead_manager_offerings.underwriter_id) = ?', lead_managers_array.length] }
  6.   }
  7.  
  8.   named_scope :co_managers, lambda { |co_managers_array|
  9.     { :joins => :co_managers,
  10.       :conditions => ['co_manager_offerings.underwriter_id in (?)', co_managers_array],
  11.       :group => 'offerings.id',
  12.       :having => ['count(DISTINCT co_manager_offerings.underwriter_id) = ?', co_managers_array.length] }
  13.   }
  14.  
  15. >> Offering.find(19671).lead_managers.each { |x| puts x.id }
  16. 200
  17. 204
  18.  
  19. >> Offering.find(19671).co_managers.each { |x| puts x.id }
  20. 202
  21. 203
  22.  
  23. >> Offering.lead_managers([200, 204]).co_managers([202]).each {|x| puts x.id}
  24. 19671
  25. 20188
  26.  
  27. 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
  28.  
  29.  
  30. ##
  31.  
  32. >> Offering.lead_managers([200, 204]).co_managers([202,203]).each {|x| puts x.id}
  33. 19671
  34. 20188
  35.  
  36.   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
  37.  
  38. >> Offering.find(20188).lead_managers.collect { |x| x.id}
  39. => [204, 200]
  40. >> Offering.find(20188).co_managers.collect { |x| x.id}
  41. => [205, 206, 198, 202, 199, 208]