Defect #32704
closed
ActionView::Template::Error (undefined method `position' for nil:NilClass):
Added by quancept quancept almost 5 years ago.
Updated 11 months ago.
Description
Started GET "/redmine/projects/chinastockreceiver/documents" for 127.0.0.1 at 2019-12-27 20:12:30 +0800
Processing by DocumentsController#index as HTML
Parameters: {"project_id"=>"chinastockreceiver"}
Current user: xuxf (id=17)
Rendered attachments/_form.html.erb (15.7ms)
Rendered documents/_form.html.erb (31.3ms)
Rendered documents/index.html.erb within layouts/base (31.3ms)
Completed 500 Internal Server Error in 78.3ms
ActionView::Template::Error (undefined method `position' for nil:NilClass):
18:
19: <% if @grouped.empty? ><p class="nodata"><= l(:label_no_data) ></p>< end >
20:
21: < @grouped.keys.sort.each do |group| >
22: <h3><= group ></h3>
23: <= render :partial => 'documents/document', :collection => @grouped[group] >
24: < end %>
app/models/enumeration.rb:93:in `<=>'
app/views/documents/index.html.erb:21:in `sort'
app/views/documents/index.html.erb:21:in `_app_views_documents_index_html_erb__107423285_27756576'
Files
I am not sure why nil is passed to <=>
, but I think the following patch should fix the problem.
diff --git a/app/models/enumeration.rb b/app/models/enumeration.rb
index 4710fde81..a8ca08726 100644
--- a/app/models/enumeration.rb
+++ b/app/models/enumeration.rb
@@ -90,6 +90,7 @@ class Enumeration < ActiveRecord::Base
end
def <=>(enumeration)
+ return -1 if enumeration.nil?
position <=> enumeration.position
end
- Related to Defect #10053: undefined method `<=>' for nil:NilClass when accessing the settings of a project added
- Related to Patch #38772: <=> should return nil when invoked with an incomparable object added
I think the data in your database is inconsistent. For example, you deleted document categories by directly using a DELETE statement of SQL. I succeeded to reproduce the error by deleting document categories with the following SQL.
delete from enumerations where type = 'DocumentCategory';
The attached patch fixes the issue by ignoring inconsistent data.
- Status changed from New to Closed
- Resolution set to Fixed
Due to the changes made in #38772, passing nil to <=>
no longer causes the exception to occur.
Also available in: Atom
PDF