2016-09-24 150 views
1

我有一个Rails标签来调用一个对象像这样Ruby on Rails的,如何使用try()方法,在这种情况下

<%= item.product.name %> 

的属性,但我得到了错误未定义的方法“产品”的nilClass 。我试图使用try()方法,就像下面的代码,它可以让nill对象从产品,

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

,但我不知道如何从产品名称的属性了。

编辑: 我试试这个代码item.try(:product).try(:[], :name)先生这样@Andrey Daineko和先生相同的代码@santhosh建议, 这是结果,如果产品不在nill,其工作 enter image description here

但它仍然给这个错误如果产品是nill,

enter image description here

+0

但'item'不是散列,是吗? –

回答

3

使用安全导航(可从红宝石2.3.0):

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

对于散列使用Hash#dig(可从红宝石2.3.0):

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

我试过这个item.try(:product).try(:name),但仍然给出同样的错误undefined方法'product', item&.product&.name < - 它给我一个语法错误“语法错误,意外的'。' ...; @ output_buffer.append =(item&.product&.name);“ –

+0

@AuliyaFadli然后它意味着你没有'产品'方法''项目'和'产品'模型之间的关联。但这是另一个故事,这个答案是关于如何使用安全导航(你最初问到的)。 –

+0

我有方法产品肯定,它只是不工作,如果该产品为空,如果它不是空工作.. –

2

你叫尝试的返回值尝试

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

,或者如果产品是一个Hash,

item.try(:product).try(:[], :name) 
+0

我已编辑我的问题与您的建议代码的结果,它仍然给出同样的错误,如果产品零.. –

+0

@AndreyDeineko,访问哈希与试试,这是OP的问题。 – Santhosh

相关问题