问题很简单:
这样使用救援是一种很好的做法吗?
...
<td><%= @customer.address.city.name rescue "-" %></td>
<td><%= @customer.address.province.name rescue "-" %></td>
<td><%= @customer.address.country.name rescue "-" %></td>
...
如果不是,解决方案在哪里?之前的“如果”?
答案 0 :(得分:9)
我认为这是一种不好的做法,因为rescue
用于例外,如果某个地方发生了错误,你就不知道了。
如果使用条件或三元运算符或其他东西,但在这种情况下不使用rescue:
<td><%= @customer.address.city.name if @customer.address %></td>
<td><%= @customer.address ? @customer.address.city.name : '-' %></td>
如果您希望Rails方式在ApplicationHelper
中移动此逻辑或使用Drapper gem。
答案 1 :(得分:9)
在Rails中使用try
method:
<td><%= @customer.address.city.try(:name) || '-' %></td>
在Ruby 2.3+中,您可以使用原生safe navigation operator:
<td><%= @customer&.address&.city&.name || '-' %></td>
答案 2 :(得分:3)
不,在视图页面中使用rescue不是最佳做法。
尝试使用以下尝试方法尝试方法的三元运算符:
...
&lt;%= @ customer.try(:address).present? ? @ customer.try(:address).try(:city).try(:name):&#34; - &#34;%&gt;
...
您还可以在条件部分链接 尝试方法。
三元运算符类似于if else条件,但我们不需要使用if-else进行多行编码。
希望有所帮助......
NARKOZ也是一种很好的做法。
谢谢!
答案 3 :(得分:0)
问题:
...
<td><%= @customer.address.city.name rescue "-" %></td>
<td><%= @customer.address.province.name rescue "-" %></td>
<td><%= @customer.address.country.name rescue "-" %></td>
...
解决方案:
...
<td><%= (@customer.address && @customer.address.city && @customer.address.city.name) || "-" %></td>
<td><%= (@customer.address && @customer.address.province && @customer.address.province.name) || "-" %></td>
<td><%= (@customer.address && @customer.address.country && @customer.address.country.name) || "-" %></td>
...