Rails 3 – link_to:delete正在重定向以显示安装了jquery的操作

我有几个链接,我正在尝试创建以执行自定义控制器方法或销毁操作。 我通过jquery-rails gem使用jquery并运行了生成器并且似乎正确包含:

    

以下是使用以下链接的示例:method =>:delete:

  :delete, :confirm => "Are you sure?" %> 

与我的routes.rb:

 resources :lists 

我想也许问题可能在于我的控制器方法,但我仍然不明白为什么它会渲染show动作,这里是我对上面链接/控制器的destroy方法。

 def destroy @list = current_user.lists.find(params[:id]) @list.active = false @list.save if @list.save redirect_to root_path, :notice => "List '#{@list.name}' deleted." else render :action => 'edit' end end 

有没有明显的东西我在这里失踪,特别是jquery,因为很多人似乎都有同样的问题。

我不确定这个问题是否与jquery有关,但我建议用button_to替换link_tolink_to应该工作,但是button_to是“确保导致数据更改的链接最安全的方法,不会被搜索机器人或加速器触发”(来源:Rails API doc)

如果你可以把你所做的和你的问题中发生的事情放在哪里,这将有助于大大地诊断正在发生的事情。

一些诊断步骤:

  1. validation/javascripts/rails.js中的文件/javascripts/rails.js正在加载您期望的内容(在浏览器中检查)。
  2. 单击删除链接时,确保获得预期的确认对话框。
  3. 检查你的日志文件( tail -f your_app/logs/development.log ); 确保您看到对相应路径的DELETE请求,并且它正在路由到相应的控制器操作。
  4. 删除对@list.save的第一次调用,只留下一个作为条件的一部分。
  5. 检查列表对象上的updated_at时间戳是否正在更改。

我认为你的问题的答案是jQuery在你的link_to中混淆了:method =>:delete。 您可能知道,如果您不指定:method =>:delete,那么根据REST,您将被重定向到show action。 我打赌(99,9%)这就是发生的事情。 原因:没有请求DELETE这样的东西,只有GET和POST。 Rails做一个技巧让它删除(我想通过插入_method =删除,如果我没记错)

引用使用新Rails应用程序生成的rails.js:RAILS.JS,并包含所有不显眼的处理程序。 但是,它依赖于PROTOTYPE,所以如果你想依赖jQuery,请使用以下内容! 由于冲突,不能同时使用!! 参考: http : //www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3 =使用javascript_include_tag’jquery_ujs.js’不要使用:/ = javascript_include_tag’rail.js’/ = javascript_include_tag’jrails.js’“正式废弃”当然,对于资产管道,您可以使用主应用程序.js文件并引用所有其他文件javascript_include_tag’applications.js’