我将更改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
显示在网址中?
这是因为params
是ActionController::Parameters
的一个实例,它是专门创建的,因为人们将params
对象视为哈希,就像你试图做的那样。
正如@arieljuod建议的那样,你必须转换你的路线/链接以使用POST
请求而不是GET
请求。这样,params将与HTTP标头一起发送,而不是作为查询字符串显示在URL栏中。
所以在你的情况下:
<%= link_to 'Change', my_service_path(change: '1234567890'), method: :post %>
...并确保您的路线配置为响应POST
请求
您正在尝试做什么,“改变”,对我说你正试图修改资源的状态。在RESTful设计中,你应该是PATCH
ing,而不是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服务器编辑资源,而不是获取它。
在评论中回答你的问题:
如何使用POST或表单阻止查询参数显示在> url中?
如果您发送POST请求,您的请求也会有一个正文。因此,在链接的GET请求中,将通过URL发送更改信息。在POST请求(使用button_to
或表单)中,它将通过正文发送,而不会显示在网址中。然后,您仍然可以通过参数访问它