我通过link_to
将变更ID作为参数传递:
<%= 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
在网址中显示?
答案 0 :(得分:1)
这是因为params
是ActionController::Parameters
的一个实例,它是专门创建的,因为人们在尝试将params
对象当作哈希来处理时。
按照@arieljuod的建议,您必须将路由/链接转换为使用POST
请求而不是GET
请求。这样,参数将与HTTP标头一起发送,而不是作为查询字符串显示在URL栏中。
所以在您的情况下:
<%= link_to 'Change', my_service_path(change: '1234567890'), method: :post %>
...并确保您的路由已配置为响应POST
请求
答案 1 :(得分:1)
您正在尝试做的“更改”对我说,您正在尝试修改资源的状态。在RESTful设计中,您应该PATCH
,而不是GET
。
隐藏参数的方法是创建一个表单,将change
放在一个隐藏字段中,然后使用button_tag
将该表单作为PATCH请求提交。
在Slim中,它看起来像这样:
= form_tag(url: my_service_url, method: :patch) do
= hidden_field_tag(:change, "123456789")
= submit_tag("Change")
在您的网站上,它看起来就像一个常规链接-但是,您是在指示Rails服务器编辑资源,而不是获取资源。
答案 2 :(得分:1)
在评论中回答您的问题:
如何使用POST或表单阻止查询参数显示在> url中?
如果您发送POST请求,那么您的请求也会有一个正文。因此,在来自您的链接的GET请求中,将通过url发送更改信息。在POST请求(使用button_to
或表单)中,它将通过正文发送,而不显示在url中。然后您仍然可以通过参数访问它