未定义的方法`评估'为零:NilClass

时间:2017-12-04 00:31:03

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

我收到以下错误:

undefined method `assessment' for nil:NilClass

我的代码下面有条件,除非排除方法是否为nil,但是不起作用。我也试过if条件,但也没有用。

我认为如果评估为零,我需要默认为一个数字,但不确定如何做到这一点。

日期的格式为毫秒:1482985235000

<% @sales.methods.each do |data| %>
  <%= Time.at(data.assessment.assessment_date/1000).strftime("%d/%m/%Y") unless data.assessment.assessment_date.nil? %>
<% end %>

3 个答案:

答案 0 :(得分:2)

尝试使用安全导航操作符或尝试一下。

data.try(:assessment).try(:assessment_date).nil?

或者使用安全导航操作员。

data&.assessment&.assessment_date.nil?

在nil上调用任何方法时会生成此错误。如果数据为零,那么如果评估为零,那么评估将产生错误,然后是assessment_date。无论哪种方式,你需要确保两者都存在。
我们通常不使用内联救援并通过检查两个对象来处理这种类型的场景。您可以使用任何选项,也可以查看data.assessment.present? && data.assessment.assessment_date.present?

答案 1 :(得分:0)

错误说您在nil上调用方法assessment ...这意味着nil是data。您的条件是检查data.assessment.assessment_date是否为零...但它甚至不会检查assessment_date是否为零,因为它已经在data.assessment失败了

答案 2 :(得分:0)

我找到了解决问题的方法。不确定它是否是最好的方法,但它确实有效。我在通话结束时添加了rescue 0

<% @sales.methods.each do |data| %>
  <%= Time.at(data.assessment.assessment_date/1000).strftime("%d/%m/%Y") rescue 0 %>
<% end %>