ruby on rails,在这种情况下如何使用try()方法

时间:2016-09-24 07:26:58

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个rails标签来调用像这样的对象的属性

<%= item.product.name %>

但是我得到了错误未定义的方法&#39;产品&#39;对于nilClass。我尝试使用类似下面代码的try()方法,它允许来自产品的nill对象,

<%= item.try(:[], 'product') %>,

但我现在不知道如何从产品中获取名称属性。

编辑: 我试试这段代码item.try(:product).try(:[], :name)和@Andrey Daineko先生以及@santhosh先生建议的相同代码, 如果产品不是nill,那就是结果 enter image description here

但如果产品是nill,它仍会出现此错误,

enter image description here

2 个答案:

答案 0 :(得分:3)

使用安全导航(可从Ruby 2.3.0获得):

item&.product&.name 
# for Ruby < 2.3.0
item.try(:product).try(:name)

对于哈希使用Hash#dig(可从Ruby 2.3.0获得):

hash.dig(:foo, :bar, :baz) 
# for Ruby < 2.3.0
hash.fetch(:foo, {}).fetch(:bar, {}).fetch(:baz, {})

答案 1 :(得分:2)

您可以尝试尝试使用try

的返回值
new

或者如果产品是哈希,

item.try(:product).try(:name)