如何在视图的URL中隐藏params?

问题描述 投票:0回答:3

我将更改ID作为参数传递给link_to

<%= link_to 'Change', my_service_path(change: '1234567890'), method: :get%>

在控制器中我有:

def my_action
   if params[:change]
     ...
     params.delete :change
end

但是当显示view时,我仍然看到<view url>?change=1234567890

如何防止?change=1234567890显示在网址中?

ruby-on-rails parameters ruby-on-rails-5
3个回答
1
投票

这是因为paramsActionController::Parameters的一个实例,它是专门创建的,因为人们将params对象视为哈希,就像你试图做的那样。

正如@arieljuod建议的那样,你必须转换你的路线/链接以使用POST请求而不是GET请求。这样,params将与HTTP标头一起发送,而不是作为查询字符串显示在URL栏中。

所以在你的情况下:

<%= link_to 'Change', my_service_path(change: '1234567890'), method: :post %>

...并确保您的路线配置为响应POST请求


1
投票

您正在尝试做什么,“改变”,对我说你正试图修改资源的状态。在RESTful设计中,你应该是PATCHing,而不是GET'ing。

你隐藏params的方法是创建一个表单,将change放在一个隐藏的字段中,然后使用button_tag将表单作为PATCH请求提交。

在Slim中,它看起来像这样:

= form_tag(url: my_service_url, method: :patch) do
  = hidden_field_tag(:change, "123456789")
  = submit_tag("Change")

在您的网站上,它看起来就像一个常规链接 - 但是您指示Rails服务器编辑资源,而不是获取它。


1
投票

在评论中回答你的问题:

如何使用POST或表单阻止查询参数显示在> url中?

如果您发送POST请求,您的请求也会有一个正文。因此,在链接的GET请求中,将通过URL发送更改信息。在POST请求(使用button_to或表单)中,它将通过正文发送,而不会显示在网址中。然后,您仍然可以通过参数访问它

© www.soinside.com 2019 - 2024. All rights reserved.