From a02b9c01c8b4abfaf5c991bff7400106cf7a1b2a Mon Sep 17 00:00:00 2001 From: danielgrippi Date: Fri, 13 May 2011 18:22:42 -0700 Subject: [PATCH] eager loading aspect memberships --- app/controllers/aspects_controller.rb | 6 +++--- app/controllers/contacts_controller.rb | 2 +- app/helpers/aspect_global_helper.rb | 2 +- app/helpers/aspects_helper.rb | 2 +- spec/controllers/aspects_controller_spec.rb | 6 ++++++ 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb index f1949bee3..cc5afedcc 100644 --- a/app/controllers/aspects_controller.rb +++ b/app/controllers/aspects_controller.rb @@ -112,12 +112,12 @@ class AspectsController < ApplicationController def edit @aspect = current_user.aspects.where(:id => params[:id]).includes(:contacts => {:person => :profile}).first - @contacts_in_aspect = @aspect.contacts.includes(:person => :profile).all.sort! { |x, y| x.person.name <=> y.person.name } + @contacts_in_aspect = @aspect.contacts.includes(:aspect_memberships, :person => :profile).all.sort! { |x, y| x.person.name <=> y.person.name } c = Contact.arel_table if @contacts_in_aspect.empty? - @contacts_not_in_aspect = current_user.contacts.receiving.includes(:person => :profile).all.sort! { |x, y| x.person.name <=> y.person.name } + @contacts_not_in_aspect = current_user.contacts.receiving.includes(:aspect_memberships, :person => :profile).all.sort! { |x, y| x.person.name <=> y.person.name } else - @contacts_not_in_aspect = current_user.contacts.receiving.where(c[:id].not_in(@contacts_in_aspect.map(&:id))).includes(:person => :profile).all.sort! { |x, y| x.person.name <=> y.person.name } + @contacts_not_in_aspect = current_user.contacts.receiving.where(c[:id].not_in(@contacts_in_aspect.map(&:id))).includes(:aspect_memberships, :person => :profile).all.sort! { |x, y| x.person.name <=> y.person.name } end @contacts = @contacts_in_aspect + @contacts_not_in_aspect diff --git a/app/controllers/contacts_controller.rb b/app/controllers/contacts_controller.rb index 8336f7f70..f3fbab9bb 100644 --- a/app/controllers/contacts_controller.rb +++ b/app/controllers/contacts_controller.rb @@ -37,7 +37,7 @@ class ContactsController < ApplicationController end def sharing - @contacts = current_user.contacts.sharing.includes(:aspects) + @contacts = current_user.contacts.sharing.includes(:aspect_memberships) render :layout => false end end diff --git a/app/helpers/aspect_global_helper.rb b/app/helpers/aspect_global_helper.rb index 66f2a9976..d9921c375 100644 --- a/app/helpers/aspect_global_helper.rb +++ b/app/helpers/aspect_global_helper.rb @@ -83,7 +83,7 @@ module AspectGlobalHelper end def aspect_dropdown_list_item(aspect, contact, person) - checked = contact.persisted? && contact.aspects.include?(aspect) ? "checked=\"checked\"" : "" + checked = (contact.persisted? && contact.aspect_memberships.detect{ |am| am.aspect_id == aspect.id}) ? "checked=\"checked\"" : "" str = "
  • " str << "" str << aspect.name diff --git a/app/helpers/aspects_helper.rb b/app/helpers/aspects_helper.rb index 42716f846..e9588ec3b 100644 --- a/app/helpers/aspects_helper.rb +++ b/app/helpers/aspects_helper.rb @@ -39,7 +39,7 @@ module AspectsHelper end def aspect_membership_button(aspect, contact, person) - if contact.nil? || !aspect.contacts.include?(contact) + if contact.nil? || !contact.aspect_memberships.detect{ |am| am.aspect_id == aspect.id} add_to_aspect_button(aspect.id, person.id) else remove_from_aspect_button(aspect.id, person.id) diff --git a/spec/controllers/aspects_controller_spec.rb b/spec/controllers/aspects_controller_spec.rb index 5079d8a26..485c61cde 100644 --- a/spec/controllers/aspects_controller_spec.rb +++ b/spec/controllers/aspects_controller_spec.rb @@ -352,6 +352,12 @@ describe AspectsController do get :edit, :id => alices_aspect_3.id assigns[:contacts].map(&:id).should == [alice.contact_for(bob.person), alice.contact_for(eve.person), alice.contact_for(@katz.person), alice.contact_for(@zed.person)].map(&:id) end + + it 'eager loads the aspect memberships for all the contacts' do + get :edit, :id => @alices_aspect_2.id + pp assigns[:contacts].count + assigns[:contacts].each{ |c| pp @alices_aspect_2.contacts.include?(c); c.aspect_memberships.loaded?.should be_true} + end end describe "#toggle_contact_visibility" do