64

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

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

任何想法为什么它不起作用?

4

10 回答 10

145

我可能弄错了,但您没有指定控制器和: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?'}
于 2013-05-21T13:00:07.357 回答
50

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

//= require jquery_ujs

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

= javascript_include_tag :application

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

运行您的服务器并验证您的链接标签是否具有数据确认值,例如:

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

如果所有这些步骤都是正确的,那么一切都应该正常!

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

于 2013-05-22T12:48:34.000 回答
13

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

<%= link_to 'Reset message', { controller: 'your_controller', action: 'reset' }, data: {confirm: 'Are you sure?'} %>
于 2014-05-13T02:12:01.310 回答
11
<%= link_to 'Reset Message', data: {confirm:"Are you sure?"} %>

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

于 2019-07-23T19:34:18.793 回答
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。代码的后半部分添加了确认消息。

于 2018-11-13T09:26:33.867 回答
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?'将被解释为 aurl_option而不是 ahtml_option

于 2013-05-21T11:38:24.750 回答
1

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

<%= button_to('', delete_path(), method: "delete", data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>
于 2018-11-18T11:03:00.687 回答
0

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

<%= link_to("Reset message", :method => :reset, :class => 'action', :confirm => 'Are you sure?') %>
于 2013-05-21T13:21:14.093 回答
0

观看此 railscasts 视频以更好地理解。

http://railscasts.com/episodes/205-unobtrusive-javascript

link_to 助手的 rails 文档。

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

于 2013-05-21T13:51:06.697 回答
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?'}

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

于 2018-01-10T13:35:32.587 回答