ruby-on-rails 对发布的链接使用Rails link_to

z4iuyo4d  于 2022-11-19  发布在  Ruby
关注(0)|答案(6)|浏览(179)

我有一个链接,我需要用它来提交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> HTML元素中,但在单击链接时并没有提交这些参数:

<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>

有没有办法使用link_to或任何其他Rails方法来执行带参数的POST请求?

vzgqcmou

vzgqcmou1#

简单地说,如果“参数”指的是表单字段,那么您就不能这样做(至少不能以我所看到的直接方式)。您应该使用带有提交按钮的表单,样式看起来像链接(如果您希望它看起来像链接)。
另一方面,如果您指的是 query 参数,则可以这样做:

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

pinkon5k2#

请注意,如果用户禁用了JS,或者您删除了默认情况下不引人注目的JS库,则link_to将通过GET请求静默提交。
一般来说,我不太喜欢使用执行POST请求的链接,我认为这是表单和按钮的作用。
因此,一种简单(且更安全)的替代方法是使用Rails button_to helper:

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

button_to也支持method选项,但由于它默认为post,因此我省略了它。

guykilcj

guykilcj3#

您可以使用以下方式对URL中的参数进行编码:

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

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

jdzmm42g

jdzmm42g4#

对于带Turbo的导轨7

link_to "Profile", profile_path(@profile), data: { turbo_method: "post" }
sshcrbum

sshcrbum5#

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

20jt8wwn

20jt8wwn6#

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

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

相关问题