【问题标题】:Hidden request params and simple GET request隐藏的请求参数和简单的 GET 请求
【发布时间】:2011-03-21 16:06:21
【问题描述】:

有文章和标签模型。

要查找与特定标签相关联的文章,用户单击一个链接并跟随到“/articles?tags=iPhone” URL。

除了“tags”参数外,我还需要将另一个参数传递给服务器,比如“hiddenParam”,不应出现在地址栏中

因此,用户应该在地址栏中看到“/articles?tags=iPhone”,并且还应该在请求正文中提供额外的“hiddenParam”。

这是否可能,在 Rails 中使用标准的 ActionView 助手?

【问题讨论】:

  • 就个人而言,我认为这是不可能的......要么全部显示(GET),要么全部不显示(POST)

标签: ruby-on-rails http request


【解决方案1】:

您应该发送一个 POST 请求,其中包含您不希望在 URL 栏中显示的变量,但设置请求路径以包含您希望显示的参数。

一个示例 curl 请求是:

curl "http://localhost:3000/articles?tags=iPhone" --data "secret=sssssh" -X POST

然后在您的控制器中,这两个参数都应该可用。

但是,请记住,页面在其当前状态下将无法添加书签/链接。如果您确实需要该 url 可供除当前用户以外的任何人使用,您可能真的想加密或散列隐藏参数并通过 get 将其传递。

PS。为什么没有 /tags/:id 的路线?

【讨论】:

  • 我没有这样的路线,因为除了文章我还有其他模型,也可以标记
  • 作为一个概念性的想法,它可能会起作用,但是,这样的请求应该由没有 curl 的浏览器(而不是服务器)发送 :)
  • 是的,我知道您希望通过浏览器进行此操作,但是用 curl 表示法来解释浏览器将发出的请求很容易理解。
  • 在这种情况下,我会制作一堆路线。 /articles/tagged/:slug, /products/tagged/:slug 等
【解决方案2】:

如果你真的需要,试试这个:

<%= form_tag('articles/?tags=iPhone', :method => "post") do %>
  <%= hidden_field_tag(:hiddenParam, "mySecret") %>
  <%= submit_tag("Browse articles") %>
<% end %>

然后使用 CSS 样式使您的按钮看起来/看起来像一个链接。 但请记住,这不适用于搜索引擎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 2021-03-12
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2016-10-17
    相关资源
    最近更新 更多