myexperiment-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myexperiment-hackers] [2183] trunk/app/models/user.rb: Faster .friends


From: noreply
Subject: [myexperiment-hackers] [2183] trunk/app/models/user.rb: Faster .friends and .networks.
Date: Wed, 29 Apr 2009 10:45:31 -0400 (EDT)

Revision
2183
Author
dtm
Date
2009-04-29 10:45:30 -0400 (Wed, 29 Apr 2009)

Log Message

Faster .friends and .networks.

Modified Paths

Diff

Modified: trunk/app/models/user.rb (2182 => 2183)


--- trunk/app/models/user.rb	2009-04-28 15:29:57 UTC (rev 2182)
+++ trunk/app/models/user.rb	2009-04-29 14:45:30 UTC (rev 2183)
@@ -383,9 +383,11 @@
   end
   
   def friends
-    (friends_of_mine + friends_with_me).uniq.sort { |a, b|
-      a.name.downcase <=> b.name.downcase
-    }
+    User.find(:all,
+              :select => "users.*",
+              :joins => "JOIN friendships f ON (users.id = f.friend_id OR users.id = f.user_id)",
+              :conditions => ["(f.user_id = ? OR f.friend_id = ?) AND (f.accepted_at IS NOT NULL) AND (users.id <> ?)", id, id, id],
+              :order => "lower(users.name)" )
   end
   
   has_and_belongs_to_many :networks,
@@ -395,13 +397,11 @@
                           
   alias_method :original_networks, :networks
   def networks
-    rtn = []
-    
-    original_networks(force_reload = true).each do |n|
-      rtn << Network.find(n.network_id)
-    end
-    
-    return rtn
+    Network.find(:all,
+                 :select => "networks.*",
+                 :joins => "JOIN memberships m ON (networks.id = m.network_id)",
+                 :conditions => ["m.user_id=? AND m.user_established_at is NOT NULL AND m.network_established_at IS NOT NULL", id],
+                 :order => "GREATEST(m.user_established_at, m.network_established_at) DESC" )
   end
                           
   has_many :networks_owned,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]