使用Rails link_to获取发布的链接

at.*_*at. 79 post ruby-on-rails link-to ruby-on-rails-3 ruby-on-rails-3.2

我有一个链接,我需要提交一个帖子请求.通常,我会使用jQuery并阻止链接的默认行为,然后将表单提交到目标.这似乎是Rails应该能够帮助我的东西.果然,该link_to方法有一个指定POST http方法的选项:

link_to "Profile", 'http://example.com/profile', method: :post
Run Code Online (Sandbox Code Playgroud)

这有效,但我也需要添加2个参数.我试过了:

link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2'
Run Code Online (Sandbox Code Playgroud)

这只是将这些参数添加到<a>HTML元素中,但是在单击链接时没有提交这些参数:

<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>
Run Code Online (Sandbox Code Playgroud)

有没有办法使用参数link_to或任何其他Rails方法执行POST请求?我正在使用Rails 3.2.9.

Chr*_*erg 128

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

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

link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post
Run Code Online (Sandbox Code Playgroud)

  • 重要的是要注意,如果用户禁用了javascript,则链接将默认为"GET"请求. (2认同)

Kos*_*sis 16

请注意,如果用户禁用了 JS,或者您删除了默认提供的不显眼的 JS 库,link_to则会通过GET请求静默提交。

一般来说,我不太喜欢有执行POST请求的链接。我想这就是表单和按钮的作用。

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

button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2')
Run Code Online (Sandbox Code Playgroud)

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


Lic*_*cke 10

适用于带有 Turbo 的 Rails 7

link_to "Profile", profile_path(@profile), data: { turbo_method: "post" }
Run Code Online (Sandbox Code Playgroud)


Adr*_*uio 8

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

link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post
Run Code Online (Sandbox Code Playgroud)

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