有没有办法让控制台忽略某些错误?
假设我有一个实例变量@n
,在我看来,我打电话给<%= @n.title %>
。有没有办法让控制台忽略某些错误?
如果@n
等于有效记录,那么这将正常打印。但是,如果@n
是空白或无效的,则整个页面将显示错误消息,因为这一小行。
有没有办法让@n.title
只打印零如果@n
是无效或无效?
我正在寻找一种方法来做到这一点没有条件的陈述。例如,如果我想打印
<%= @v1.title %>,<%= @v2.title %>,<%= @v3.title %>,<%= @v4.title %>,
,如果我想使用条件没有错误打印,将需要12行代码:
<% if @v1 %>
<%= @v1.title %>,
<% end %>
<% if @v2 %>
<%= @v2.title %>,
<% end %>
<% elsif @v3 %>
<%= @v3.title %>,
<% end %>
<% elsif @v4 %>
<%= @v4.title %>,
<% end %>
这似乎是一个耻辱,上使用12线这个。在打印时能够完成错误处理权限将会很好。
你可以用try()
方法完全做到这一点。我用它所有的时间。
<%= @n.try(:title) %>
,将返回nil
如果@n
是nil
或者如果title
方法上不存在@n
。
你也可以把它们连在一起就像这样:
@n.try(:title).try(:to_s)
甚至使用它的哈希:
@n.try(:[], 'name') # Which is the same as @n['name']
见http://api.rubyonrails.org/classes/Object.html#method-i-try
EDIT(2016年1月11日)
您现在可以使用“保险箱导航运营商“截至Ruby 2.3.0。
@n&.title&.to_s
还有在Ruby 2.3.0引入的Array#dig
和Hash#dig
方法。
hash = { 'name' => 'bob' }
hash.dig('name') # Which is the safe way to do hash['name']
您可以在视图中添加一些逻辑来区分开发(其中一些错误可以忽略)和生产环境(错误应该导致您的应用程序以明显丑陋的方式失败)。 Ruby的nil
具有“虚假”的性质,所以你可以使用这个概念来获得你的好处。
<% if Rails.env.development? %>
<% if @n %>
<%= @n.title %>
<% else %>
<%= nil %>
<% end %>
<% else %>
<%= @n.title %>
<% end %>
是否可以在没有条件语句的情况下完成此操作? –
那么,首先不要设置“@ n”是“错误的”,所以我不确定你的期望在这里完全是现实的。如果您不想使用条件,请确保在控制器中正确设置字段。在这种情况下,我不确定简洁的代码是您的首要任务。您还可以通过将环境测试与'@ n'的测试结合起来,使我的代码更加简洁,进一步节省了几行。 – MarsAtomic
你能用这个链接吗?例如,用'',如果'@ n'为零,则不打印任何内容,而是打印'raze_path'的url输出。我可以通过链接打印什么吗? –