Some optimizations to ServicesController#finder. Apparently setting an association on an unsaved record to an empty array hits the database.
This commit is contained in:
parent
b85df7303b
commit
f0583de36c
6 changed files with 36 additions and 45 deletions
|
|
@ -66,7 +66,7 @@ module AspectGlobalHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def aspect_dropdown_list_item(aspect, contact, person)
|
def aspect_dropdown_list_item(aspect, contact, person)
|
||||||
checked = (contact.persisted? && contact.aspect_memberships.detect{ |am| am.aspect_id == aspect.id})
|
checked = (contact.persisted? && contact.in_aspect?(aspect))
|
||||||
klass = checked ? "selected" : ""
|
klass = checked ? "selected" : ""
|
||||||
|
|
||||||
str = <<LISTITEM
|
str = <<LISTITEM
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
module ServicesHelper
|
module ServicesHelper
|
||||||
|
@@contact_proxy = Contact.new(:aspects => [])
|
||||||
def contact_proxy(friend)
|
def contact_proxy(friend)
|
||||||
friend.contact || Contact.new(:person => friend.person, :aspects => [])
|
friend.contact || @@contact_proxy.dup.tap{|c| c.person = friend.person}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,16 @@ class Contact < ActiveRecord::Base
|
||||||
self.sharing && self.receiving
|
self.sharing && self.receiving
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def in_aspect? aspect
|
||||||
|
if aspect_memberships.loaded?
|
||||||
|
aspect_memberships.detect{ |am| am.aspect_id == aspect.id }
|
||||||
|
elsif aspects.loaded?
|
||||||
|
aspects.detect{ |a| a.id == aspect.id }
|
||||||
|
else
|
||||||
|
AspectMembership.exists?(:contact_id => self.id, :aspect_id => aspect.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def not_contact_for_self
|
def not_contact_for_self
|
||||||
if person_id && person.owner == user
|
if person_id && person.owner == user
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ class Services::Facebook < Service
|
||||||
else
|
else
|
||||||
self.service_users
|
self.service_users
|
||||||
end
|
end
|
||||||
result.order('service_users.person_id DESC, service_users.name')
|
result.includes(:contact => :aspects, :person => :profile).order('service_users.person_id DESC, service_users.name')
|
||||||
end
|
end
|
||||||
|
|
||||||
def save_friends
|
def save_friends
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,28 @@
|
||||||
%li.remote_friend{:id => "uid_" + friend.uid, :uid => friend.uid}
|
.stream_element.contact{:id => friend.id}
|
||||||
|
.right
|
||||||
|
|
||||||
|
- if friend.already_invited?
|
||||||
|
= link_to t('services.index.resend'), service_inviter_path(:uid => friend.uid, :provider => 'facebook', :invitation_id => friend.invitation_id)
|
||||||
|
- elsif friend.on_diaspora?
|
||||||
|
= render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left'
|
||||||
|
- else
|
||||||
|
= render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left', :extra_class => 'inviter', :service_uid => friend.uid
|
||||||
|
|
||||||
- if friend.on_diaspora?
|
- if friend.on_diaspora?
|
||||||
= person_image_link(friend.person, :size => :thumb_small)
|
= person_image_link(friend.person, :size => :thumb_small)
|
||||||
- else
|
- else
|
||||||
= image_tag(friend.photo_url, :class => 'avatar')
|
= image_tag(friend.photo_url, :class => 'avatar')
|
||||||
|
|
||||||
%h4.name
|
.content
|
||||||
- if friend.on_diaspora?
|
%span.from.name
|
||||||
= link_to friend.name, person_path(friend.person)
|
- if friend.on_diaspora?
|
||||||
- else
|
= link_to friend.name, person_path(friend.person)
|
||||||
= friend.name
|
- else
|
||||||
|
= friend.name
|
||||||
- if friend.already_invited?
|
|
||||||
= link_to t('.resend'), service_inviter_path(:uid => friend.uid, :provider => 'facebook', :invitation_id => friend.invitation_id)
|
|
||||||
- elsif friend.on_diaspora?
|
|
||||||
= render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left'
|
|
||||||
- else
|
|
||||||
= facebook_invite_form(friend)
|
|
||||||
|
|
||||||
|
|
||||||
|
.info
|
||||||
|
- if friend.person
|
||||||
|
= friend.person.diaspora_handle
|
||||||
|
- else
|
||||||
|
not yet on diaspora
|
||||||
|
|
|
||||||
|
|
@ -17,35 +17,7 @@
|
||||||
= t('.service_friends', :service => params[:provider].titleize)
|
= t('.service_friends', :service => params[:provider].titleize)
|
||||||
#people_stream.stream.contacts
|
#people_stream.stream.contacts
|
||||||
- if @friends.size > 0
|
- if @friends.size > 0
|
||||||
- for friend in @friends
|
= render :partial => 'remote_friend', :collection => @friends, :as => :friend
|
||||||
.stream_element.contact{:id => friend.id}
|
|
||||||
.right
|
|
||||||
|
|
||||||
- if friend.already_invited?
|
|
||||||
= link_to t('.resend'), service_inviter_path(:uid => friend.uid, :provider => 'facebook', :invitation_id => friend.invitation_id)
|
|
||||||
- elsif friend.on_diaspora?
|
|
||||||
= render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left'
|
|
||||||
- else
|
|
||||||
= render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left', :extra_class => 'inviter', :service_uid => friend.uid
|
|
||||||
|
|
||||||
- if friend.on_diaspora?
|
|
||||||
= person_image_link(friend.person, :size => :thumb_small)
|
|
||||||
- else
|
|
||||||
= image_tag(friend.photo_url, :class => 'avatar')
|
|
||||||
|
|
||||||
.content
|
|
||||||
%span.from.name
|
|
||||||
- if friend.on_diaspora?
|
|
||||||
= link_to friend.name, person_path(friend.person)
|
|
||||||
- else
|
|
||||||
= friend.name
|
|
||||||
|
|
||||||
|
|
||||||
.info
|
|
||||||
- if friend.person
|
|
||||||
= friend.person.diaspora_handle
|
|
||||||
- else
|
|
||||||
not yet on diaspora
|
|
||||||
|
|
||||||
/= will_paginate @friends
|
/= will_paginate @friends
|
||||||
- else
|
- else
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue