2015-01-02 4 views
0

Я пытаюсь создать другую метадайзу для каждого продукта в моей базе данных. Продукт может иметь несколько значений (почти все значения хранятся в виде массивов).Создайте уникальную метаданные для каждого продукта

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

Смежные вопросы