用于nil的未定义方法`each_with_index':使用组的NilClass

时间:2018-01-03 05:07:02

标签: ruby-on-rails ruby-on-rails-5

我收到以下错误:

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 %>

3 个答案:

答案 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