我收到以下错误:
undefined method `each_with_index' for nil:NilClass
我已经解决了我遇到的问题的问题,并且它与我的范围的组部分有关,因为当我删除它工作的组选项时,但不是我想要的。有没有办法超过我的循环中的nil记录?我已尝试过以下try
方法,但仍有同样的问题。
我也尝试了group.try(:assessmentDate)
,但收到以下错误:
The method .group() must contain arguments.
模型
class EstablishmentMethod < ApplicationRecord
scope :assessment_date, -> { group('assessmentDate').group('treatment_selection_id').order(:treatment_selection_id).order("assessmentDate ASC") }
end
索引
<% data.establishmentMethods.order(:treatment_selection_id).try(:assessment_date).in_groups_of(3)[i].each_with_index do |e, index| %>
...
<% end %>
答案 0 :(得分:3)
in_groups_of用于按给定数字分组数组。您看到了这个错误,因为如果您的数组长度小于3,这是正常的。例如:
irb(main):003:0> %w(1 2).in_groups_of(3)
=> [["1", "2", nil]]
如果["1", "2", nil]
是索引号,您就会像i
那样迭代一个组。但如果i
不在数组的索引范围内,则您将选择nil
对象。例如:
irb(main):003:0> gr = %w(1 2).in_groups_of(3)
=> [["1", "2", nil]]
irb(main):004:0> gr[3]
=> nil
然后,在使用each_with_index
时,您会看到以下错误。
答案 1 :(得分:0)
我认为这里不需要[i]
<% data.establishmentMethods.order(:treatment_selection_id).try(:assessment_date).in_groups_of(3).each_with_index do |e, index| %>
...
<% end %>
答案 2 :(得分:0)
这似乎与[i]的值有关你可能应该在这里使用嵌套循环(取决于你是什么问题&#39;试图解决)
<% data.establishmentMethods.order(:treatment_selection_id).try(:assessment_date).in_groups_of(3).each_with_index do |e, index_a| %>
<% e.each_with_index do |elem,index_b| %>
...
<% end %>
<% end %>
如果需要保留[i](例如,如果有外环),请确保[i]的最大值设置为:
max_i = (data.establishmentMethods.order(:treatment_selection_id).try(:assessment_date).length.to_f)/(3.to_f)).ceil