我试图为我的数据库中的每个产品生成不同的元描述。产品可以有多个值(几乎所有值都存储为数组)。
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(" ")}
的值。对于具有这些值的产品,没有错误。我怎么解决这个问题?感谢。
答案 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 %>