使用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
所以我刚刚省略它。