2016-09-24 23 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

相關問題