如何在Rails中自动获取元描述和关键字?

dec*_*cay 1 javascript ruby ruby-on-rails-3

我正在使用Rails 3开发一个应用程序,其中一个requeriments是每个页面上唯一的元描述和关键字,以改善SEO.

客户端需要自动执行此操作.你怎么做到这一点?使用Rails,Ruby或直接使用Javascript更好吗?

谢谢.

fx_*_*fx_ 5

在Rails中执行,而不是通过javascript.搜索引擎不会执行您的JavaScript.

我通常做的是编写一个元助手,我只是将其粘贴在我的ApplicationHelper中,如下所示:

def meta(field = nil, list = [])
  field = field.to_s
  @meta ||= {
    'robots' => ['all'],
    'copyright' => ['My Copyright'],
    'content-language' => ['en'],
    'title' => [],
    'keywords' => []
  }

  if field.present?
    @meta[field] ||= []
    case list.class
      when Array then
        @meta[field] += list
      when String then
        @meta[field] += [list]
      else
        @meta[field] += [list]
    end

    case field
      when 'description' then
        content = truncate(strip_tags(h(@meta[field].join(', '))), :length => 255)
      else
        content = @meta[field].join(', ')
    end

    return raw(%(<meta #{att}="#{h(field)}" content="#{h(content)}"/>))
  else
    tags = ''
    @meta.each do |field, list|
      tags += meta(field)+"\n"
    end
    return tags.rstrip
  end
end
Run Code Online (Sandbox Code Playgroud)

您可以通过在其中添加对meta()的调用,在视图中设置元标记.因此,articles/show.html.erb您可以将其添加到视图的顶部:

<% meta(:title, @article.title) %>
Run Code Online (Sandbox Code Playgroud)

在你的布局中,你添加它没有任何参数,所以它会吐出元标记.

<%= meta %>
Run Code Online (Sandbox Code Playgroud)

或者让它输出一个单独的标签:

<%= meta(:title) %>
Run Code Online (Sandbox Code Playgroud)

我打赌你有更优雅的解决方案.但是如果你正在寻找已经在Rails中实现的东西,那你就不走运了.