]> source.dussan.org Git - redmine.git/commitdiff
Speeds up rendering of the project list for users who belong to hundreds of projects.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 3 Jan 2017 18:28:45 +0000 (18:28 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 3 Jan 2017 18:28:45 +0000 (18:28 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@16123 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/principal.rb

index f3e0a3d4d86fadc58eb79fb695d8bbe3dc561379..15cf6996145ffd41682a499bae771453d5e29ae5 100644 (file)
@@ -108,6 +108,11 @@ class Principal < ActiveRecord::Base
 
   before_create :set_default_empty_values
 
+  def reload(*args)
+    @project_ids = nil
+    super
+  end
+
   def name(formatter = nil)
     to_s
   end
@@ -124,9 +129,14 @@ class Principal < ActiveRecord::Base
     Principal.visible(user).where(:id => id).first == self
   end
 
-  # Return true if the principal is a member of project
+  # Returns true if the principal is a member of project
   def member_of?(project)
-    projects.to_a.include?(project)
+    project.is_a?(Project) && project_ids.include?(project.id)
+  end
+
+  # Returns an array of the project ids that the principal is a member of
+  def project_ids
+    @project_ids ||= super.freeze
   end
 
   def <=>(principal)