2015-01-02 24 views
0

我正試圖爲我的數據庫中的每個產品生成不同的metadescription。一個產品可以有多個值(幾乎所有的值都以數組形式存儲)。爲每個產品生成唯一的metadescription

Show.html.erb

<% if @product.about.nil? %> 
    <% meta_description "#{@product.name} #{@product.type.join(" ")} 
    #{@product.location.join(" ")} #{@product.market.join(" ")} 
    {@product.material.join(" ")}" %> 
<% else %> 
    <% meta_description "#{@product.about}" %> 
<% end %> 

我得到以下錯誤:

undefined method `join' for nil:NilClass 

,這是因爲特定的產品有#{@product.market.join(" ")}#{@product.material.join(" ")}沒有值。對於具有這些值的產品,沒有錯誤。我該如何解決這個問題?謝謝。

回答

1

變化@product.material.join(" ")變爲@product.material.try(:join, " ")

另外,如果是我,我會將所有的邏輯移出視圖,並轉移到@product上的助手或實例方法。

實施例的實例方法:

class Product << ActiveRecord::Base 

    def meta_description 
    if about.present? 
     about 
    else 
     "#{name} #{type.try(:join, ' ')} #{location.try(:join, ' ')} #{market.try(:join, ' ')} {material.try(:join, ' ')}" 
    end 
    end 

end 

然後在視圖:

<% meta_description @product.meta_description %> 
+0

由於菲利普。奇蹟般有效。我是一名鐵桿新手。任何機會,你可以告訴我你將如何把邏輯放入助手? – ECsAUtaVku

+0

@mini我已經更新了我的答案,以包含一個實例方法示例。助手會是類似的,但你顯然需要傳遞產品。 –

+0

非常感謝! – ECsAUtaVku