diff options
Diffstat (limited to 'app/models/issue.rb')
-rw-r--r-- | app/models/issue.rb | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index b44154340..2f1021b2d 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -752,7 +752,7 @@ class Issue < ActiveRecord::Base end def relations - @relations ||= (relations_from + relations_to).sort + @relations ||= IssueRelations.new(self, (relations_from + relations_to).sort) end # Preloads relations for a collection of issues @@ -775,6 +775,25 @@ class Issue < ActiveRecord::Base end end + # Preloads visible relations for a collection of issues + def self.load_visible_relations(issues, user=User.current) + if issues.any? + issue_ids = issues.map(&:id) + # Relations with issue_from in given issues and visible issue_to + relations_from = IssueRelation.includes(:issue_to => [:status, :project]).where(visible_condition(user)).where(:issue_from_id => issue_ids).all + # Relations with issue_to in given issues and visible issue_from + relations_to = IssueRelation.includes(:issue_from => [:status, :project]).where(visible_condition(user)).where(:issue_to_id => issue_ids).all + + issues.each do |issue| + relations = + relations_from.select {|relation| relation.issue_from_id == issue.id} + + relations_to.select {|relation| relation.issue_to_id == issue.id} + + issue.instance_variable_set "@relations", IssueRelations.new(issue, relations.sort) + end + end + end + # Finds an issue relation given its id. def find_relation(relation_id) IssueRelation.find(relation_id, :conditions => ["issue_to_id = ? OR issue_from_id = ?", id, id]) |