使用 Rails link_to 发布链接

问题描述 投票:0回答:7

我有一个链接,我需要用它来提交帖子请求。通常,我会使用 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.

ruby-on-rails ruby-on-rails-3 post ruby-on-rails-3.2 link-to
7个回答
162
投票

简短的回答是,如果“参数”的意思是表单字段,那么您根本无法做到这一点(至少不能以我能看到的直接方式)。您应该改用带有提交按钮的表单,样式看起来像链接(如果您希望它看起来像)。

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

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

14
投票

请注意,如果用户禁用了 JS 或者您删除了默认提供的不显眼的 JS 库,

link_to
将通过
GET
请求静默提交。

总的来说,我不太喜欢有执行

POST
请求的链接。我认为这就是表单和按钮的作用。

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

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

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


8
投票

您可以通过这种方式在 URL 中编码参数:

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

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

link_to


7
投票

对于带 Turbo 的 Rails 7

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

1
投票

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


1
投票

参数和http方法要放在一起

{param1: 'value1', param2: 'value2', :method: :post}

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

-1
投票

link_to 方法创建一个 HTML 超链接,用户可以单击该链接以导航到另一个 URL。它有两个参数 - 第一个是将显示为链接的文本,第二个是链接将导航到的 URL。这是一个例子 <%= link_to "Click here", "/new_page" %> 你可以在这里阅读更多:https://giveitaread.net/rails_link_to/

© www.soinside.com 2019 - 2024. All rights reserved.