Defect #1146
:include in IssueQuery should AFAIK be an array not a hash
Description
This is a bit of a strange bug report, because I couldn't really detect the root cause of this error.
When running Redmine 3.2.1 on CentOS 7 (Ruby 2.0.0p598) with both plugins "scrum" (0.13.2) and "extended_fields" (trunk), I get a strange HTTP 500 error when clicking on the "Calendar" of a project and the error log message:
I, [2016-03-21T23:55:42.635280 #15869] INFO -- : Started GET "/projects/kaas/issues/calendar" for 10.242.2.6 at 2016-03-21 23:55:42 +0100
I, [2016-03-21T23:55:42.742558 #15869] INFO -- : Processing by CalendarsController#show as HTML
I, [2016-03-21T23:55:42.742728 #15869] INFO -- : Parameters: {"project_id"=>"test"}
I, [2016-03-21T23:55:42.748361 #15869] INFO -- : Current user: admin (id=1)
I, [2016-03-21T23:55:42.866978 #15869] INFO -- : Completed 500 Internal Server Error in 124ms (ActiveRecord: 9.7ms)
F, [2016-03-21T23:55:42.868471 #15869] FATAL -- :
NoMethodError (undefined method `<<' for {}:Hash):
plugins/scrum/lib/scrum/issue_query_patch.rb:47:in `issue_ids_with_scrum'
plugins/extended_fields/lib/extended_calendars_controller_patch.rb:37:in `extended_show'
plugins/scrum/lib/scrum/calendars_controller_patch.rb:18:in `add_sprints'
lib/redmine/sudo_mode.rb:63:in `sudo_mode'
Funny point is, that this does not happen, when the "extended_fields" plugin is not there.
Anyway, I looked ito issue_query_patch.rb and found these lines
def issues_with_scrum(options = {})
options[:include] ||= {}
options[:include] << :sprint
issues_without_scrum(options)
end
alias_method_chain :issues, :scrum
def issue_ids_with_scrum(options = {})
options[:include] ||= {}
options[:include] << :sprint
issue_ids_without_scrum(options)
end
alias_method_chain :issue_ids, :scrum
By looking at redmine/app/models/issue_query.rb (what the issue_query_patch.rb is actually patching), I see, that the functions 'issue' and 'idssue_ids' is to my understanding expecting 'options[:include]' to be an array and not a hash. Here (issue_ids is analogue):
def issues(options={})
order_option = [group_by_sort_order, options[:order]].flatten.reject(&:blank?)
scope = Issue.visible.
joins(:status, :project).
where(statement).
includes(([:status, :project] + (options[:include] || [])).uniq).
where(options[:conditions]).
order(order_option).
joins(joins_for_order_statement(order_option.join(','))).
limit(options[:limit]).
offset(options[:offset])
# SNIP
So if I change issue_query_patch.rb to
def issues_with_scrum(options = {})
options[:include] ||= []
options[:include] << :sprint
issues_without_scrum(options)
end
alias_method_chain :issues, :scrum
def issue_ids_with_scrum(options = {})
options[:include] ||= []
options[:include] << :sprint
issue_ids_without_scrum(options)
end
alias_method_chain :issue_ids, :scrum
everything seems to work as expected for me and the error disappears.
It seems strange that the hash way of defining an unknown 'options[:include]' has been there since pretty much the beginning of this plugin and I didn't find any bug reports here directly addressing this possible problem. Also it doesn't seem either, that Redmine had changed anything drastically, so I feel a bit uncertain what to think about my experiences, but I wanted to share, what I did go get rid of this error in my installation.
Don't hesitate asking if you need further information about my system or make me do tests.
No data to display