Jav*_*cia 3 ruby ruby-on-rails erb rescue
问题很简单:
像这样使用救援是一种很好的做法吗?
...
<td><%= @customer.address.city.name rescue "-" %></td>
<td><%= @customer.address.province.name rescue "-" %></td>
<td><%= @customer.address.country.name rescue "-" %></td>
...
Run Code Online (Sandbox Code Playgroud)
如果不是,解决方案在哪里?之前的"如果"?
NAR*_*KOZ 10
在Rails中使用try方法:
<td><%= @customer.address.city.try(:name) || '-' %></td>
Run Code Online (Sandbox Code Playgroud)
在Ruby 2.3+中,您可以使用本机安全导航操作符:
<td><%= @customer&.address&.city&.name || '-' %></td>
Run Code Online (Sandbox Code Playgroud)
我认为这是一种不好的做法,因为rescue对于异常,如果某个地方发生了错误,你就不知道了.
如果是条件或三元运算符或其他东西,但在这种情况下不使用rescue,请使用:
<td><%= @customer.address.city.name if @customer.address %></td>
<td><%= @customer.address ? @customer.address.city.name : '-' %></td>
Run Code Online (Sandbox Code Playgroud)
如果你想让Rails方式移动这个逻辑ApplicationHelper或使用Drapper gem.