删除/销毁在使用jQuery的rails 3中不起作用
我的删除/销毁不适用于Rails 3。
不适用于任何脚手架,甚至不适用于新项目。
'Are you sure?', :method => :delete %>
从这个问题 。 解决方案是Firefox重新安装。 但我的也不是铬,safari或歌剧。
生成的Html代码: –
Destroy
PS:请不要说包含默认的JS文件或其他东西。 因为我对原型一起不感兴趣,因为我正在使用jQuery。
编辑/更新,重要:当您根本不想使用原型时,这是解决方案。 我在我的项目中只使用jQuery和各自的插件。
人们正在回答:首先包括原型等,然后安装一些gem等来消除原型和jQuery之间的冲突。 那是垃圾。
我已经发布了答案。 在您选择之前请检查一次。 为我工作了10多个项目,没有任何问题。 您需要做的就是:
从app.js除外的javascript目录中删除所有js文件。 然后将我在答案中指定的代码粘贴到新文件中并包含该文件。 包括Jquery.js然后你就完成了。 您不需要添加默认的javascript(即:prototype)或其他一些gem来删除冲突等。
我遇到了Mohit所遇到的同样问题,还需要在我的JavaScript资源中包含“Unobtrusive JavaScript Library”(或“ujs”)。 在我目前的Rails(v3.2.5)中,将自动提供UJS库。 您可以通过查看Gemfile中的以下行来validation这一点:
gem 'jquery-rails'
以及app / assets / javascripts / application.js文件中的以下行:
//= require jquery_ujs
由于我不知道更好,我从我自己的application.js文件中删除了require jquery_ujs
行,我花了一段时间才弄清楚为什么我的link_to ..., :method => :delete
调用不是再工作了!
一旦我理解了这个问题,很容易将上面的两行添加回各自的文件中,一切都按预期再次开始工作。
如果您使用的是Jquery而不是原型,那么每当您尝试删除它将显示页面时,您需要在项目中添加Jquery.rails.js。
我不记得从哪里得到解决方案和这个Jquery.rails.js文件。 但肯定来自一些值得信赖的消息来源。
这是该文件的代码。 可能会帮助别人。
jQuery(function ($) { var csrf_token = $('meta[name=csrf-token]').attr('content'), csrf_param = $('meta[name=csrf-param]').attr('content'); $.fn.extend({ /** * Triggers a custom event on an element and returns the event result * this is used to get around not being able to ensure callbacks are placed * at the end of the chain. * * TODO: deprecate with jQuery 1.4.2 release, in favor of subscribing to our * own events and placing ourselves at the end of the chain. */ triggerAndReturn: function (name, data) { var event = new $.Event(name); this.trigger(event, data); return event.result !== false; }, /** * Handles execution of remote calls firing overridable events along the way */ callRemote: function () { var el = this, data = el.is('form') ? el.serializeArray() : [], method = el.attr('method') || el.attr('data-method') || 'GET', url = el.attr('action') || el.attr('href'); if (url === undefined) { throw "No URL specified for remote call (action or href must be present)."; } else { if (el.triggerAndReturn('ajax:before')) { $.ajax({ url: url, data: data, dataType: 'script', type: method.toUpperCase(), beforeSend: function (xhr) { el.trigger('ajax:loading', xhr); }, success: function (data, status, xhr) { el.trigger('ajax:success', [data, status, xhr]); }, complete: function (xhr) { el.trigger('ajax:complete', xhr); }, error: function (xhr, status, error) { el.trigger('ajax:failure', [xhr, status, error]); } }); } el.trigger('ajax:after'); } } }); /** * confirmation handler */ $('a[data-confirm],input[data-confirm]').live('click', function () { var el = $(this); if (el.triggerAndReturn('confirm')) { if (!confirm(el.attr('data-confirm'))) { return false; } } }); /** * remote handlers */ $('form[data-remote]').live('submit', function (e) { $(this).callRemote(); e.preventDefault(); }); $('a[data-remote],input[data-remote]').live('click', function (e) { $(this).callRemote(); e.preventDefault(); }); $('a[data-method]:not([data-remote])').live('click', function (e){ var link = $(this), href = link.attr('href'), method = link.attr('data-method'), form = $('
更新:
您可以从此处获取Jquery.rails.js的最新副本。
https://raw.github.com/rails/jquery-ujs/master/src/rails.js
确保在布局中包含默认的Rails javascript文件。
<%= javascript_include_tag :defaults %>
确保在布局中包含默认的Rails javascript文件。
<%= javascript_include_tag "application" %>