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

Generate a unique metadescription for each product

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

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(" ")} 的值。对于具有这些值的产品,没有错误。我该如何解决这个问题?谢谢

@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 %>