处理预期的nils

时间:2009-11-17 05:16:20

标签: ruby-on-rails null

我希望看到使用以下嵌入式Ruby返回nil:

<%=h [@inventory.origin.code] %>

它返回“NoMethodError nil对象”。但是,当一个对象实际存在时,它的功能就好了(正如预期的那样)。

因此我创建了此测试(遵循this建议):

<b>origin_id:</b>
  <% if (@inventory.origin.code.nil? or @inventory.origin.code == 0)  %>
  <%=h [@inventory.origin] %>
  <% else %>
  <%=h @inventory.origin.code %>
  <% end %>

意外地rails返回 NoMethodError“当你没想到它时,你有一个nil对象!”

您对处理这种情况有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:3)

您要添加.nil?支票太晚了。我假设它是origin是零,而不是code或者你不会得到那个错误。请改用:

<%=h [@inventory.origin.code] unless @inventory.origin.nil? %>

答案 1 :(得分:1)

重申了dcneiner的回答:

<%=h [@inventory.origin.code] if @inventory.origin %>