Aggiunta di query SQL aggiuntive in una vista core di Redmine (visualizzazione prioritaria nel plug-in)

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

  •  05-07-2019
  •  | 
  •  

Domanda

Sto eseguendo l'override di una vista core di Redmine nel mio plugin (/views/reports/_details.rhtml). Solo per stampare alcuni dati extra, come il numero di problemi aperti assegnati e non assegnati.

Ho provato invece a sovrascrivere il controller e aggiungere un metodo per farlo, ma non l'ho mai fatto funzionare, quindi ho aggiunto il codice seguente alla vista (sì, è brutto, ma la pagina verrà utilizzata raramente).

Ora per il mio problema, la vista scorre ciclicamente su tutti i tracker (row.id) e mostra informazioni, come il numero di problemi aperti e chiusi. Quindi ho aggiunto una query SQL aggiuntiva, ma funziona solo per la prima iterazione del tracker, per il resto mostra gli stessi dati più e più volte.

Quando guardo development.log c'è solo una query SQL al suo interno. Ma quando eseguo l'output di row.id (& Lt;% = row.id% & Gt;) mostra il valore corretto per ciascun tracker.

Come devo risolvere questo?

Codice in _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") %>

Query SQL in 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

(mai usato Ruby on Rails o Redmine prima ...)

È stato utile?

Soluzione

L'ho risolto aggiungendo due query SQL (nella vista) che selezionano tutti i problemi al progetto selezionato.

<% @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") %>

Quindi io uso.

<%= aggregate_link @all_unsigned_issues, { "tracker_id" => row.id, "status" => 5 },
            :controller => 'issues', :action => 'index', :project_id => ((row.is_a?(Project) ? row : @project)) %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top