如何使用 link_to 添加确认消息 Ruby on Rails

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

我想用 Ruby 在 link_to 函数上添加确认消息。

= link_to 'Reset message', :action=>'reset' ,:confirm=>'Are you sure?'

有什么想法为什么不起作用吗?

ruby ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2 link-to
12个回答
152
投票

我可能弄错了,但您没有指定控制器以及

:action
选项。您尝试过以下方法吗?假设您在路线中配置了
messages
资源:

link_to 'Reset', message_path(@message), :confirm => 'Are you sure?'

编辑:以上已弃用。 Rails 4.0 现在接受提示作为数据属性。请参阅文档此处(感谢@Ricky)。

link_to 'Reset', message_path(@message), :data => {:confirm => 'Are you sure?'}

52
投票

首先,您应该验证您的布局是否具有 jquery_ujs。 最佳实践是将其包含在您的主 application.js:

//= require jquery_ujs

检查您是否在布局中包含了 application.js

= javascript_include_tag :application

在开发模式下,查看源 html 并验证 jquery_ujs.js 是否存在。

运行您的服务器并验证您的链接标签具有 data-confirm 值,例如:

<a href="/articles/1" data-confirm="Are you sure?" data-method="delete">

如果所有这些步骤都正确,一切都应该有效!

注意:检查这个 RailsCast http://railscasts.com/episodes/136-jquery-ajax-revised


13
投票

不记得在 Rails 3 中这是如何完成的,但在 Rails 4 中你可以简单地:

<%= link_to 'Reset message', { controller: 'your_controller', action: 'reset' }, data: {confirm: 'Are you sure?'} %>

13
投票
<%= link_to 'Reset Message', data: {confirm:"Are you sure?"} %>

记得添加“重置消息”和数据之间的路径


4
投票
<%= link_to "Delete this article", article_path(article), method: :delete,
                    data: { confirm: "Are you sure you want to delete the 
                    article?"}, class: "btn btn-xs btn-danger" %>

一个按钮链接,其中

article_path
是前缀,
(article)
正在传递
id
方法所需的
method: :delete
。 代码的后面部分添加了确认消息。


3
投票

试试这个:

= link_to 'Reset message', {:action=>'reset'}, :confirm=>'Are you sure?'

或者说得更清楚

= link_to('Reset message', {:action=>'reset'}, {:confirm=>'Are you sure?'})

参考 http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

当您将 url 作为选项提供时,您会看到有 3 个参数,如

{:action => ..., :controller => ...}

link_to(body, url_options = {}, html_options = {})

在 ruby 中,如果函数调用中的最后一个参数是哈希值,则无需将其包装在

{}
字符中(换句话说,如果哈希值是最后一个参数,则可以省略它),因此代码您提供的将被解释为仅具有 2 个参数的函数调用,
'Reset message'
字符串和
{:action=>'reset', :confirm=>'Are you sure?'}
哈希,并且
:confirm=>'Are you sure?'
将被解释为
url_option
而不是
html_option


1
投票

不知何故,这些代码仅在 Safari 浏览器中不起作用,所以我参与了按钮...

<%= button_to('', delete_path(), method: "delete", data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>

1
投票

在带有 Turbo 的 Rails 7 中,我尝试了上面的解决方案,但它们对我不起作用,但是 this 对我有用。

提示:将以下4个方法直接复制到您应用程序的页面中并进行测试!

<%= link_to "GET turbo link", "/",
  data: {
    turbo_method: :get,
    turbo_confirm: "Sure?"
  }
%><br>

<%= link_to "POST turbo link", "/",
  data: {
    turbo_method: :post,
    turbo_confirm: "Sure?"
  }
%>

<%= button_to "Button", "/",
  data: { turbo_confirm: "Sure?" }
%>

<%= form_with url: "/",
  data: { turbo_confirm: "Sure?" } do |f| %>

  <%= f.submit "Submit" %>
<% end %>

此信息来自这个非常有用的答案:https://stackoverflow.com/a/75046023/5783745


1
投票

驱动您所描述的确认功能的 UJS 库在 Rails 7 中默认不再启用。该功能已被 Turbo 取代,但有一个升级指南可以让它们更好地发挥作用。

相反,我建议实施基于模式的确认,Turbo 使这变得非常简单。 GoRails 有一个关于如何实现它的简单教程

我错过了一个问题:确保使用

button_to
(而不是
link_to
),并且不要将按钮嵌套在另一个表单中。


0
投票

查看您的 javascript_include_tag ,它应该可以正常工作:

<%= link_to("Reset message", :method => :reset, :class => 'action', :confirm => 'Are you sure?') %>

0
投票

0
投票

首先,我们需要了解rails应用程序中哪些Js包响应此类警报。因此,jquery_ujs 包负责在 Rails 中显示警报。

所以你的 application.js 文件中必须有 jquery 和 jquery_ujs 。

//= require jquery
//= require jquery_ujs

现在,我们需要确认 application.js 文件是否包含在您所需的布局中。默认情况下,布局文件保留在视图的布局文件夹中的 application.html.erb 中。

<%= javascript_include_tag 'application' %>

接下来,链接应具有 data-confirm 和 data-method 属性:

<a href="/message/1/reset" data-method="delete" data-confirm="Are you sure?">

在 erb 中,可以写成,

= link_to 'Reset', message_path(@message), data: {method: 'delete', confirm: 'Are you sure?'}

如果一切都以相同的方式对齐,这应该可行。

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