Ajouter des requêtes SQL supplémentaires dans une vue principale Redmine (redéfinir la vue dans le plugin)

StackOverflow https://stackoverflow.com/questions/1804133

  •  05-07-2019
  •  | 
  •  

Question

Je remplace une vue principale Redmine dans mon plugin (/views/reports/_details.rhtml). Juste pour imprimer des données supplémentaires, telles que le nombre de questions en suspens attribuées et non affectées.

J'ai essayé de remplacer le contrôleur et d'ajouter une méthode pour le faire, mais je ne l'ai jamais fait fonctionner. J'ai donc ajouté le code ci-dessous à la vue (oui, c'est moche, mais la page sera rarement utilisée).

Maintenant, à mon problème, la vue parcourt tous les suiveurs (row.id) et affiche des informations, telles que le nombre de problèmes ouverts et fermés. J'ai donc ajouté une requête SQL supplémentaire, mais cela ne fonctionne que pour la première itération du tracker, pour le reste, les mêmes données sont affichées à maintes reprises.

Quand je regarde le development.log, il ne contient qu'une requête SQL. Mais lorsque je produis row.id (& Lt;% = row.id% & Gt;), il indique la valeur correcte pour chaque suivi.

Comment dois-je résoudre ce problème?

Code dans _details.rhtml

<% @total_assigned_and_open ||=
        ActiveRecord::Base.connection.select_all("select count(i.id) as total
        from
        #{Issue.table_name} i, #{IssueStatus.table_name} s, #{Tracker.table_name} t
        where
        i.status_id=s.id
        and i.tracker_id=#{row.id}
        and i.project_id=#{@project.id}
        and i.assigned_to_id is null
        and s.is_closed = 0
        group by s.id, s.is_closed, t.id limit 1") %>

Requête SQL dans development.log

select count(i.id) as total
from
issues i, issue_statuses s, trackers t
where
i.status_id=s.id
and i.tracker_id=1
and i.project_id=1
and i.assigned_to_id is null
and s.is_closed = 0
group by s.id, s.is_closed, t.id limit 1

(Jamais utilisé Ruby on Rails ou Redmine avant ...)

Était-ce utile?

La solution

Je l'ai résolu en ajoutant deux requêtes SQL (dans la vue) qui sélectionnent tous les problèmes du projet sélectionné.

<% @all_unsigned_issues ||=
ActiveRecord::Base.connection.select_all("select i.status_id as status, s.is_closed as 
closed, t.id as tracker_id, count(i.id) as total
from
#{Issue.table_name} i, #{IssueStatus.table_name} s, #{Tracker.table_name} t 
where
i.assigned_to_id is null
and i.project_id=#{@project.id}
and i.status_id=s.id
and i.tracker_id=t.id
group by i.id") %>

Puis-je utiliser.

<%= aggregate_link @all_unsigned_issues, { "tracker_id" => row.id, "status" => 5 },
            :controller => 'issues', :action => 'index', :project_id => ((row.is_a?(Project) ? row : @project)) %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top