Modified: branches/event_logging/app/models/network.rb (2190 => 2191)
--- branches/event_logging/app/models/network.rb 2009-05-08 16:07:44 UTC (rev 2190)
+++ branches/event_logging/app/models/network.rb 2009-05-08 16:32:35 UTC (rev 2191)
@@ -121,13 +121,13 @@
alias_method :original_members, :members
def members(incl_owner=true)
- rtn = incl_owner ? [User.find(owner.id)] : []
-
- original_members(force_reload = true).each do |m|
- rtn << User.find(m.user_id)
- end
-
- return rtn
+ explicit_members = User.find(:all,
+ :select => "users.*",
+ :joins => "JOIN memberships m on (users.id = m.user_id)",
+ :conditions => [ "m.network_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"
+ )
+ return incl_owner ? ( [owner] + explicit_members ) : explicit_members
end
def member?(userid)
Modified: branches/event_logging/app/models/user.rb (2190 => 2191)
--- branches/event_logging/app/models/user.rb 2009-05-08 16:07:44 UTC (rev 2190)
+++ branches/event_logging/app/models/user.rb 2009-05-08 16:32:35 UTC (rev 2191)
@@ -394,9 +394,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,
@@ -406,13 +408,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,
@@ -539,17 +539,12 @@
# 1) the ID of a user (of 2 involved in the 'friendship') who is a 'friend', not an owner of the friendship;
# 2) the 'friendship' object itself
def friendship_from_self_id_and_friends_id(friend_id)
- friendship = Friendship.find(:first, :conditions => [ "user_id = ? AND friend_id = ?", id, friend_id ] )
+ friendship = Friendship.find(:first, :conditions => [ "( (user_id = ? AND friend_id = ?) OR ( user_id = ? AND friend_id = ? ) )", id, friend_id, friend_id, id ] )
if friendship
return [friend_id, friendship]
- elsif
- friendship = Friendship.find(:first, :conditions => [ "user_id = ? AND friend_id = ?", friend_id, id ] )
- if friendship
- return [id, friendship]
- else
- return [nil, nil] # an error state
- end
+ else
+ return [nil, nil] # an error state
end
end