2013-04-03 136 views
11

我刚刚开始在rails上编写ruby代码,我一直在使用比我使用的更过时的rails版本。我使用3.2.12:确认在rails无法正常工作

这是我的代码:

<%= button_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?' %> 

从我个人理解,这是传递给钢轨的符号,然后将其转化到任何一个HTML或JavaScript的行动,然后啪啪弹出消息框并删除对象(如果适用)。上面的代码破坏了对象,但它不会弹出确认框。为什么是这样?另外,我有上面首先如下:

<%= link_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?' %> 

确认框中没有在任何情况下弹出,使用的link_to或button_to。下面是使用Chrome浏览器进行检查时呈现的HTML。 jquery和jquery-ujs也加载到了,所以我不知道该从哪里去。

<input name="_method" type="hidden" value="delete"> 
<input data-confirm="Are you sureeee?" type="submit" value="Destroy"> 
<input name="authenticity_token" type="hidden" value="Q2xicqELHYHtrwarbtPBe5PT2bZgWV5C+JdcReJI8ig="> 

谢谢!

回答

50

我不得不在数据属性中添加我的确认属性以使其起作用。我正在使用带引导程序的rails 4。我希望这可以帮助有这个问题的其他人。

link_to 'Delete', @rule, method: :delete, data: { confirm: 'Are you sure you want to delete this alert?' } 
+0

是的,这对我来说。谢谢。 – Billy 2015-01-04 19:49:41

+0

嗯,那有效。 – Avishai 2015-05-06 21:40:48

+0

使用Rails 4和Foundation为我工作。谢谢! – 2015-12-10 01:14:49

9

这依赖于jQuery的,确保您具备以下条件:

在你的Gemfile

group :assets do 
    gem 'jquery-rails' 
end 
在你的资产/ JavaScript的/的application.js文件

,行//= require_tree .

//= require jquery 
//= require jquery_ujs 
+0

我有你提到的两个标签,但它仍然不会弹出确认框 – jamesdlivesinatree 2013-04-04 06:31:48

+0

我想你捆绑安装并重新启动你的Rails服务器? – Benj 2013-04-04 06:50:46

+0

如何测试javascript是否正常工作?我不认为这是事实,我认为这是问题所在。我只是不确定是什么原因造成的。 – jamesdlivesinatree 2013-04-04 07:20:20

5

link_to和button_to之间的区别是HTTP动词。 link_to发出GET请求,button_to发出POST请求。使用RESTful路由,delete操作是对控制器/ ID的POST请求。如果您发出GET到控制器/编号,它将被分派到show操作。

AIUI,link_to与GET动词以外的任何东西都是坏主意。其一,右键点击不保留动词。其二,您不希望漫游器爬取页面以跟随链接,从而触发delete操作,即使您可能需要登录才能实际修改数据库。

+1

谢谢你的解释。非常翔实,现在更有意义。但是,我仍然很好奇如何获得:确认弹出。这仍然不适合我。 – jamesdlivesinatree 2013-04-04 06:33:00

3

感觉非常愚蠢,但adblock阻止了消息框。对于那个很抱歉。现在一切都很好,我只是禁用了adblock。

+0

有趣:)但很高兴你发现它:) – Benj 2013-04-06 08:03:03

0

我有一个在Chrome中运行的弹出窗口拦截器。我刚刚列入白名单http://localhost:3000,它对我很有帮助。