处理预期的 nils
我希望看到以下嵌入 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您添加
.nil?
检查为时已晚。我假设origin
为零,而不是code
否则您不会收到该错误。使用这个代替:You are adding the
.nil?
check too late. I am assuming it isorigin
that is nil, notcode
or you wouldn't be getting that error. Use this instead:重构 dcneiner 的答案:
Refactor of dcneiner's answer: