Добавление дополнительных SQL-запросов в основное представление Redmine (переопределение в плагине)

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Я переопределяю основной вид Redmine в своем плагине (/views/reports/_details.rhtml). Просто для печати дополнительных данных, например, сколько открытых выпусков назначено, а не назначено.

Я попытался переопределить контроллер и добавить метод для этого, но мне так и не удалось заставить его работать, поэтому я добавил приведенный ниже код в представление (да, это уродливо, но страница редко используется).

Теперь к моей проблеме, представление циклично проходит через все трекеры (row.id) и показывает информацию, например, сколько вопросов открыто и закрыто. Поэтому я добавил дополнительный SQL-запрос, но он работает только для первой итерации трекера, в остальном он показывает одни и те же данные снова и снова.

Когда я смотрю на файл development.log, в нем только один SQL-запрос. Но когда я вывожу row.id (& Lt;% = row.id% & Gt;), он показывает правильное значение для каждого трекера.

Как мне решить эту проблему?

Код в _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") %>

SQL-запрос в 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

(никогда раньше не использовал Ruby on Rails или Redmine ...)

Это было полезно?

Решение

Я решил это, добавив два SQL-запроса (в представлении), которые выбирают все проблемы для выбранного проекта.

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

Тогда я использую.

<%= aggregate_link @all_unsigned_issues, { "tracker_id" => row.id, "status" => 5 },
            :controller => 'issues', :action => 'index', :project_id => ((row.is_a?(Project) ? row : @project)) %>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top