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)
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)
您可以通过以下方式对URL中的参数进行编码:
link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post
Run Code Online (Sandbox Code Playgroud)
如果它不符合您的需求,您最好使用表格而不是link_to.