]> source.dussan.org Git - redmine.git/commitdiff
Don't load all issues' journals (#1474).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 5 Mar 2017 08:05:29 +0000 (08:05 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 5 Mar 2017 08:05:29 +0000 (08:05 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@16369 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb

index c80920ca512ab90d65fd8be7f1ce2baf7ad25adc..431574acdacd45de3345e5e8d42f52b1a727b605 100644 (file)
@@ -1172,14 +1172,16 @@ class Issue < ActiveRecord::Base
   def self.load_visible_last_notes(issues, user=User.current)
     if issues.any?
       issue_ids = issues.map(&:id)
-
-      notes = Journal.joins(issue: :project).where.not(notes: '').
-        where(Journal.visible_notes_condition(User.current, :skip_pre_condition => true)).
-        where(:issues => {:id => issue_ids}).order("#{Journal.table_name}.id ASC").to_a
+      journals = Journal.joins(issue: :project).
+        where(:journalized_type => 'Issue', :journalized_id => issue_ids).
+        where("#{Journal.table_name}.id = (SELECT MAX(j.id) FROM #{Journal.table_name} j" +
+              " WHERE j.journalized_type='Issue' AND j.journalized_id=#{Journal.table_name}.journalized_id" +
+              " AND j.notes <> ''" +
+              " AND #{Journal.visible_notes_condition(user, :skip_pre_condition => true)})").to_a
 
       issues.each do |issue|
-        note = notes.select{|note| note.journalized_id == issue.id}
-        issue.instance_variable_set "@last_notes", (note.empty? ? '' : note.last.notes)
+        journal = journals.detect {|j| j.journalized_id == issue.id}
+        issue.instance_variable_set("@last_notes", journal.try(:notes) || '')
       end
     end
   end