mar*_*ion 1 error-handling null ruby-on-rails exception ruby-on-rails-4
在我/post/index.html看来,我有这一行:
<%= post.status.upcase %>
Run Code Online (Sandbox Code Playgroud)
每当有一个post具有nil值的状态时,我都会收到此错误:
NoMethodError at /
undefined method `upcase' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
如何安全地处理nil整个应用程序中的所有值,以便它不会抛出这样的错误,它只是优雅地降级甚至忽略它?
我是否必须遍历可能具有可返回 nil 的属性的每个视图和每个对象,并为每个视图和对象添加异常处理?
有没有一种“Rails-y”DRY 方法来处理这个问题?
我只是想用另一个选项来更新这个线程:Ruby 现在(从 2.3 开始)为我们提供了一个安全的导航操作符,即语法&.。
所以:
post.status.upcase
会成为:
post.status&.upcase
与 Rail 的try方法类似,nil如果NoMethodError在nil.
恕我直言,忽略 nil 是一个坏主意。这将导致无法追踪的细微错误。但是,如果您的示例想要的是在statusnil 时输出一个空字符串(或根本不输出任何内容),那么您有几个选择。对于我认为你正在做的事情,我更喜欢第一个,其次是第二个,讨厌最后两个。
post.status.to_s.upcase
post.status.try(:upcase)
post.status.present? ? post.status.upcase : 'NO STATUS. OH NO'
begin
post.status.upcase
rescue
'NO STATUS. OH NO'
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8442 次 |
| 最近记录: |