如何在rails上获取动态生成的URL的规范URL?

时间:2017-04-16 06:55:12

标签: ruby-on-rails canonical-link

我为主页实现了规范网址,如下所示:我添加了这一行

  <link rel='canonical' href='https://example.com/'> 

我在index.html.erb部分header上添加了这一行。它工作正常。

现在我有动态路由生成线,如下所示:

<a href "<%= search_equipments_path(:category_id => category.id) %>">

我尝试了以下内容:

<a rel='canonical' href="<%= search_equipments_path(:category_id => category.slug) %>">

但没有工作。

2 个答案:

答案 0 :(得分:4)

我们可以通过这种方式在rails中设置规范标签。此rails代码将输出完整当前url的规范标记。在HTML head部分的布局中添加它。

 <link rel="canonical" href="<%= url_for(:only_path => false) %>" />

您还可以使用以下命令指定要用于此URL的默认协议:

<link rel="canonical" href="<%=url_for(:only_path => false, :protocol => 'https')" />

有关更多选项,请参阅此link

希望这有帮助。

答案 1 :(得分:3)

您可以使用content_for在布局的标题部分中创建动态块:

# app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
  <head>
    # ...
    <% if content_for?(:canonical_url) -%>
      <%= tag :link, href: content_for(:canonical_url), rel: 'canonical' %>
    <% end -%>
  </head>
</html>

然后,您可以在观看中提供canonical_url

<%= provide(:canonical_url, search_equipments_url(category.slug)) %>