使用Rails link_to获取发布的链接

时间:2012-11-16 10:24:08

标签: ruby-on-rails ruby-on-rails-3 post ruby-on-rails-3.2 link-to

我有一个链接,我需要提交一个帖子请求。通常,我会使用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> HTML元素中,但在点击链接时没有提交这些参数:

<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。

5 个答案:

答案 0 :(得分:123)

简短的回答是,如果“参数”的含义是表单字段,那么您根本无法做到这一点(至少不是以我能看到的直接方式)。您应该使用带有提交按钮的表单,其形状看起来像一个链接(如果这是您想要的样子)。

如果另一方面你的意思是查询参数,那么这将有效:

link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post

答案 1 :(得分:8)

您可以通过以下方式对网址中的参数进行编码:

link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post

如果它不符合您的需求,您最好使用表格而不是link_to

答案 2 :(得分:2)

要发布数据,您需要一个表单。但是,您不需要提交按钮。如果由于某种原因希望它看起来像链接,您实际上可以使它成为通过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')

答案 3 :(得分:2)

请注意,如果用户已禁用JS,或者您删除了默认情况下不显眼的JS库,则link_to将通过GET请求以静默方式提交。

一般来说,我不太喜欢拥有执行POST请求的链接。我认为这是形式和按钮的作用。

因此,一个简单(更安全)的替代方法是使用Rails button_to帮助器:

button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2')

button_to也支持method选项,但默认为post,所以我只是省略了它。

答案 4 :(得分:1)

参数和http方法应该在一起{param1: 'value1', param2: 'value2', :method: :post}

<%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %>