使用link_to设置params哈希值而不影响Rails 4中的url

时间:2015-02-17 21:56:45

标签: ruby-on-rails params rails-routing

当我提交表单时,会设置一些参数而不会显示在网址中。

我想用link_to做同样的事情:

<%= link_to((purchase.paid ? 'yes' : 'no'), {action: :index, hidden_id: purchase.id}) %>

生成网址“http://localhost:3000/purchases?hidden_id=1”。我想在设置params [:hidden_​​id]的同时链接到网址“http://localhost:3000/purchases”,以便我可以在控制器中访问它,就像我提交了一个表单一样。

我的routes.rb文件如下:

root to: 'products#index'
resources :products 
resources :purchases
match ':controller/(:action/(:id))', controller: :shop, via: [:get,:post]

在回答这个问题时,我在这里应该知道这两件事的处理方式有何不同?它是关于获取vs后期请求还是涉及到其他一些我不理解的原则?

1 个答案:

答案 0 :(得分:1)

是的,它与Get vs Post请求有关。

Get请求只能在URL本身中发送参数。邮寄请求也可以发送到包含URL本身中的参数的URL,但也可以发送参数&#39;可以这么说。

因此,如果您的路线设置为允许,您可以向http://localhost:3000/purchases?hidden_id=1发送获取或发布请求,但只有发布请求可以包含其他参数。

你应该知道关于这两种处理方式的不同之处吗?是。在大多数Web框架中,当您看到服务器端的参数时,它们将被拆分为GET参数和POST参数。 Rails没有做出这种区分,并将它们放在相同的params散列中。 (我认为这很愚蠢,但无论如何)。

此外,只需在浏览器中输入URL并按Enter即可发送获取请求。帖子请求通常仅由在网页上提交表单的用户执行。因此,获取请求并不意味着更改数据库中的任何内容。它们应仅用于查看信息。因此,例如,如果您有一个删除资源的按钮(例如,博客文章或其他内容),则应通过邮寄提交。 (Why shouldn't data be modified on an HTTP GET request?上的更多信息)

最后,Rails在其link_to帮助程序中提供了一个选项,可让您轻松制作“链接”链接&#39;使用发布请求。请参阅http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to上的method选项。这基本上使用javascript来阻止点击链接的正常操作(这将是一个获取请求),并改为提交帖子请求。