为每个产品生成唯一的元描述

时间:2015-01-02 19:36:37

标签: ruby-on-rails metadata

我试图为我的数据库中的每个产品生成不同的元描述。产品可以有多个值(几乎所有值都存储为数组)。

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 个答案:

答案 0 :(得分: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 %>