我有一个链接,我需要提交一个post请求。通常,我会使用jQuery并阻止链接的默认行为,然后向目的地提交一个表单。这似乎是Rails应该能够帮助我解决的问题。果然,link_to
方法有一个用于指定POST http方法的选项:
link_to "Profile", 'http://example.com/profile', method: :post
这是可行的,但我也需要添加2个参数。我试过了:
link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2'
它只是将这些参数添加到<a>
超文本标记语言元素,但在单击链接时没有提交这些参数:
<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>
有没有办法使用link_to
或任何其他Rails方法来执行带参数的POST请求?我使用的是Rails 3.2.9。
发布于 2012-11-16 18:56:01
您可以这样对URL中的参数进行编码:
link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post
如果它不能满足你的需要,你最好使用表单而不是link_to
。
发布于 2017-02-16 23:09:26
请注意,如果用户关闭了JS,或者您移除了默认情况下不显眼的JS库,则会通过GET
请求静默提交link_to
。
一般来说,我不太喜欢有执行POST
请求的链接。我认为这就是表单和按钮的作用。
因此,一种简单(也更安全)的替代方法是使用Rails button_to助手:
button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2')
button_to
也支持method
选项,但由于它缺省为post
,所以我将其省略。
发布于 2014-09-13 13:31:52
为了发布数据,您需要一个表单。但是,您不需要submit按钮。如果您出于某种原因希望它看起来像一个链接,那么实际上可以使它成为一个通过JavaScript提交表单的链接。在下面的示例中,POST资源只是一个REST操作,不需要任何字段,因此没有表单输入控件。如果您想发布一些数据,只需在表单中放置隐藏的输入字段。
<%= form_tag('http://something_postable', :method => :post, :class => 'internal') %></form>
<%= link_to_function('Label for Link', 'previous("form").submit()', :title => 'Hover text for link') %>
窗体被分配了一个类,因此您可以通过CSS设置它的样式或隐藏它(例如,'display: inline')
https://stackoverflow.com/questions/13414663
复制相似问题