Rails传递params与邮件或重定向301?

时间:2016-03-21 05:12:15

标签: ruby-on-rails

我有一个链接将参数传递给我的帖子的show动作:

<%= link_to post_show_path( user.id, ref: user.ref ) do %>
  go to post
<% end %>

但这会创建一个URL:localhost:3000 / post?ref = 1445461

显然,这会造成重复,导致我的搜索引擎优化。我想将该引用传递给控制器​​,但不在URL上显示它。我尝试使用方法发布但没有成功:

<%= link_to post_show_path( user.id), ref: user.ref, method: :post do %>
 go to post
<% end %>

它没有通过参数[:ref]

首先,我做错了吗?我的语法错了吗?如果没有,我还有其他选择吗?如果是的话,请你把它写下来给我?

我正在考虑进行301重定向,但是在show动作中重定向到同一个show动作显然会创建一个循环。我不想通过另一个动作只是为了进入&#34; show&#34;动作。

那我该怎么办? :)

2 个答案:

答案 0 :(得分:0)

默认情况下,html链接元素不会post。如果您需要一个能够模仿post请求的链接,那么您可以使用button_to提供的rails帮助程序。即使button_to生成按钮标记,您也可以使用一些CSS样式并使其看起来像链接。

有关详细信息,请参阅UrlHelper#button_to

答案 1 :(得分:0)

只需将ref参数添加到路径中:

<%= link_to "go to post", post_show_path(user.id, ref: user.ref), method: :post %>

但如果你唯一担心的是SEO重复,你也可以坚持使用GET请求并使用rel=nofollow directive

<%= link_to "go to post", post_show_path(user.id, ref: user.ref), rel: "nofollow" %>

更新:如果您需要的是多个网址指向同一页面(从搜索引擎优化的角度来看),那么您可能会使用规范网址,可能还具有301重定向,如例如所描述的herehere。然后谷歌(和其他人)将此页面编入单页,尽管多个网址会指向它。