使用Rails的link_to为发布链接(Using Rails link_to for links

2019-06-21 05:12发布

我有我需要提交一个POST请求的链接。 通常情况下,我会使用jQuery和阻止链接的默认行为,然后提交一个表单到目的地。 这似乎是Rails的东西应该能够帮助我。 果然, link_to方法用于指定HTTP POST方法的选择:

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>

有没有办法做到用参数的POST请求link_to或任何其他Rails的方法? 我使用Rails 3.2.9。

Answer 1:

简短的回答是,如果你所说的“参数”的意思是表单字段,那么你根本就做不到这一点(至少不是,我可以看到一个简单的方法)。 你应该使用一个形式提交按钮,风格,看起来像一个链接(如果这就是你希望它是什么样子)。

如果在另一方面,你本来还打算查询参数,那么这会工作:

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


Answer 2:

您可以编码在URL这样的参数:

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

如果它不适合你的需求,你可以更好地使用窗体比link_to



Answer 3:

为了POST数据,你需要一个形式。 但是,你并不需要一个提交按钮。 如果你想这看起来像一个链接出于某种原因,你其实可以使其成为通过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隐藏(如“显示:内联”)



Answer 4:

需要注意的是,如果用户有JS禁用或已删除的到来默认情况下,不显眼的JS库link_to将会默默地通过提交GET请求。

在一般情况下,我不是很喜欢具有执行环节的POST请求。 我认为这是一种形式,一个按钮的作用。

因此,一个简单的(和更安全的)替代方法是使用滑轨button_to助手:

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

button_to还支持method的选择,但因为它默认为post所以我只是省略了。



Answer 5:

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

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


文章来源: Using Rails link_to for links that post