Skip to content
Extraits de code Groupes Projets
Valider 2c68bb03 rédigé par Raphael's avatar Raphael
Parcourir les fichiers

Remove n-query problem from contact_list

parent e97081e8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -78,22 +78,24 @@ class AspectsController < ApplicationController ...@@ -78,22 +78,24 @@ class AspectsController < ApplicationController
end end
def edit def edit
@aspect = current_user.aspects.where(:id => params[:id]).first @aspect = current_user.aspects.where(:id => params[:id]).includes(:contacts => {:person => :profile}).first
@contacts = current_user.contacts.includes(:person => :profile).where(:pending => false) @contacts = current_user.contacts.includes(:person => :profile).where(:pending => false)
unless @aspect unless @aspect
render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404 render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404
else else
@aspect_ids = [@aspect.id] @aspect_ids = [@aspect.id]
@aspect_contacts_count = @aspect.contacts.count @aspect_contacts_count = @aspect.contacts.length
render :layout => false render :layout => false
end end
end end
def manage def manage
Rails.logger.info("Controller time")
@aspect = :manage @aspect = :manage
@contacts = current_user.contacts.includes(:person => :profile).where(:pending => false) @contacts = current_user.contacts.includes(:person => :profile).where(:pending => false)
@remote_requests = Request.where(:recipient_id => current_user.person.id).includes(:sender => :profile) @remote_requests = Request.where(:recipient_id => current_user.person.id).includes(:sender => :profile)
@aspects = @all_aspects.includes(:contacts => {:person => :profile}) @aspects = @all_aspects.includes(:contacts => {:person => :profile})
Rails.logger.info("VIEW TIME!!!!!!")
end end
def update def update
......
...@@ -38,11 +38,11 @@ module AspectsHelper ...@@ -38,11 +38,11 @@ module AspectsHelper
:class => 'added button' :class => 'added button'
end end
def aspect_membership_button(aspect_id, contact, person) def aspect_membership_button(aspect, contact, person)
if contact.nil? || !contact.aspect_ids.include?(aspect_id) if contact.nil? || !aspect.contacts.include?(contact)
add_to_aspect_button(aspect_id, person.id) add_to_aspect_button(aspect.id, person.id)
else else
remove_from_aspect_button(aspect_id, person.id) remove_from_aspect_button(aspect.id, person.id)
end end
end end
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
= button_to t('.remove_aspect'), @aspect, :method => "delete", :confirm => t('.confirm_remove_aspect'), :class => 'button' = button_to t('.remove_aspect'), @aspect, :method => "delete", :confirm => t('.confirm_remove_aspect'), :class => 'button'
- if @contacts.count > 0 - if @contacts.count > 0
= render 'shared/contact_list', :aspect_id => @aspect.id, :contacts => @contacts = render 'shared/contact_list', :aspect => @aspect, :contacts => @contacts
#aspect_edit_controls #aspect_edit_controls
= link_to t('.rename'), '#' = link_to t('.rename'), '#'
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
- for aspect in @all_aspects - for aspect in @all_aspects
%li{:data=>{:guid=>aspect.id}, :class => ("selected" if @object_aspect_ids.include?(aspect.id))} %li{:data=>{:guid=>aspect.id}, :class => ("selected" if @object_aspect_ids.include?(aspect.id))}
= link_for_aspect(aspect, :class => 'aspect_selector', :title => "#{aspect.contacts.count} contacts") = link_for_aspect(aspect, :class => 'aspect_selector', :title => "#{aspect.aspect_memberships.length} contacts")
%li %li
= link_to '+', '#add_aspect_pane', :class => "add_aspect_button", :title => t('aspects.manage.add_a_new_aspect'), :rel => 'facebox' = link_to '+', '#add_aspect_pane', :class => "add_aspect_button", :title => t('aspects.manage.add_a_new_aspect'), :rel => 'facebox'
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
%span.name %span.name
= link_to aspect.name, aspect = link_to aspect.name, aspect
.right .right
= aspect_membership_button(aspect.id, contact, person) = aspect_membership_button(aspect, contact, person)
- for aspect in aspects_without_person - for aspect in aspects_without_person
%li{:data=>{:guid=>aspect.id}} %li{:data=>{:guid=>aspect.id}}
%span.name %span.name
= link_to aspect.name, aspect = link_to aspect.name, aspect
.right .right
= aspect_membership_button(aspect.id, contact, person) = aspect_membership_button(aspect, contact, person)
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
%i= aspect.name %i= aspect.name
.span-6.append-1.last .span-6.append-1.last
%h3= t('.existing') %h3= t('.existing')
= render 'shared/contact_list', :aspect_id => aspect.id, :contacts => contacts, :manage => defined?(manage) = render 'shared/contact_list', :aspect => aspect, :contacts => contacts, :manage => defined?(manage)
.span-7.last .span-7.last
= render 'shared/add_contact', :aspect_id => aspect.id = render 'shared/add_contact', :aspect_id => aspect.id
...@@ -14,5 +14,5 @@ ...@@ -14,5 +14,5 @@
.description .description
= contact.person.diaspora_handle = contact.person.diaspora_handle
.right .right
= aspect_membership_button(aspect_id, contact, contact.person) = aspect_membership_button(aspect, contact, contact.person)
...@@ -88,14 +88,16 @@ describe AspectsController do ...@@ -88,14 +88,16 @@ describe AspectsController do
connect_users(@user, @aspect0, user, aspect) connect_users(@user, @aspect0, user, aspect)
post = @user.post(:status_message, :message => "hello#{n}", :to => @aspect1.id) post = @user.post(:status_message, :message => "hello#{n}", :to => @aspect1.id)
@posts << post @posts << post
user.comment "yo#{post.message}", :on => post 8.times do |n|
user.comment "yo#{post.message}", :on => post
end
end end
end end
it 'takes time' do it 'takes time' do
Benchmark.realtime{ Benchmark.realtime{
get :index get :index
}.should < 1.5 }.should < 0.8
end end
end end
end end
...@@ -141,6 +143,19 @@ describe AspectsController do ...@@ -141,6 +143,19 @@ describe AspectsController do
get :manage get :manage
response.should be_success response.should be_success
end end
it "performs reasonably" do
require 'benchmark'
8.times do |n|
aspect = @user.aspects.create(:name => "aspect#{n}")
8.times do |o|
person = Factory(:person)
@user.activate_contact(person, aspect)
end
end
Benchmark.realtime{
get :manage
}.should < 2
end
it "assigns aspect to manage" do it "assigns aspect to manage" do
get :manage get :manage
assigns(:aspect).should == :manage assigns(:aspect).should == :manage
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter