如何使用POST请求通过link_to传递参数?

问题描述 投票:1回答:2

我想在rails中通过link_to传递参数。但是,我不希望它成为URL的一部分。我经历了答案here,但没有帮助。

我使用的是苗条的模板,并且与此类似:

= link_to "Test", test_path(param1: "value1"), param2: 'value2', param3: value3, :method => :post

我希望param1成为URL的一部分,但不希望param2和param3。但是,params[:param2]params[:param3]给我一个空白值。

关于如何做到这一点的任何想法?

ruby-on-rails link-to
2个回答
1
投票
hidden_field_tag 'token', 'VUBJKB23UIVI1UU1VOBVI@' => <input id="token" name="token" type="hidden" value="VUBJKB23UIVI1UU1VOBVI@" />

https://apidock.com/rails/ActionView/Helpers/FormTagHelper/hidden_field_tag


1
投票

link_to创建一个普通的旧<a>链接元素。链接在所有浏览器中的工作方式是它们发送GET请求。由于GET请求没有主体,因此发送参数的唯一方法是通过URL。这就是HTTP的工作方式,与Rails中的限制无关。

Rails具有button_to,实际上使用单个按钮创建了一个表单,该按钮可用于通过隐藏输入传递数据。但是,要将参数传递到正文中(而不是URL),则需要使用POST,PUT或PATCH HTTP方法。

<%= button_to "Mark as read", @book, method: :patch, params: { state: :read } %>

[link_to还具有method选项,其结果与button_to相同,但是它依靠javascript拦截click事件并创建一个发送到服务器的表单。

<%= link_to "Mark as read", @book, method: :patch, params: { state: :read } %>

如果带[method]选项的link_to不起作用(它发送GET请求),则页面上出现JavaScript错误,这导致Rails UJS无法正常工作。

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