处理预期的 nils

发布于 2024-08-11 21:26:31 字数 628 浏览 1 评论 0原文

我希望看到以下嵌入 Ruby 返回一个 nil:

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

它返回一个“NoMethodError nil 对象”。然而,当一个对象确实存在时,它的功能就很好(正如预期的那样)。

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

<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“当你没有预料到时,你得到了一个零对象!”

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

I expect to see a nil returned with the following embedded Ruby:

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

it returns a "NoMethodError nil object". However when an object is in fact present, it functions just fine (as expected).

Therefore I created this test (following this advice):

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

unexpectedly rails returns NoMethodError "You have a nil object when you didn't expect it!"

Do you have any suggestions in dealing with this situation? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼睛会笑 2024-08-18 21:26:31

您添加 .nil? 检查为时已晚。我假设 origin 为零,而不是 code 否则您不会收到该错误。使用这个代替:

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

You are adding the .nil? check too late. I am assuming it is origin that is nil, not code or you wouldn't be getting that error. Use this instead:

<%=h [@inventory.origin.code] unless @inventory.origin.nil? %>
药祭#氼 2024-08-18 21:26:31

重构 dcneiner 的答案:

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

Refactor of dcneiner's answer:

<%=h [@inventory.origin.code] if @inventory.origin %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文