使用Rails 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。

简单的答案是,如果你的意思是“参数”是表单字段,那么你根本无法做到这一点(至less不能以我能看到的简单的方式)。 你应该使用一个提交button的forms,样式看起来像一个链接(如果这就是你想要的样子)。

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

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

你可以用这种方法在URL中编码参数:

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

如果它不适合你的需要,你最好使用一个比link_to的forms。

为了发布数据,你需要一个表单。 但是,您不需要提交button。 如果你希望这看起来像一个链接出于某种原因,你可以实际上使它成为一个链接,通过JavaScript提交表单。 在下面的例子中,POST资源只是一个REST动作,不需要任何字段,所以没有表单input控件。 如果你想发布一些数据,只需在表单中隐藏input字段。

 <%= 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')

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

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

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

一般来说,我不太喜欢有执行POST请求的链接。 我认为这是一个窗体和一个button的作用。

因此,一个简单(而且更安全)的方法是使用Rails的button_to helper:

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

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