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_to
。 link_to
应该工作,但是button_to
是“确保导致数据更改的链接最安全的方法,不会被搜索机器人或加速器触发”(来源:Rails API doc)
如果你可以把你所做的和你的问题中发生的事情放在哪里,这将有助于大大地诊断正在发生的事情。
一些诊断步骤:
- validation
/javascripts/rails.js
中的文件/javascripts/rails.js
正在加载您期望的内容(在浏览器中检查)。 - 单击删除链接时,确保获得预期的确认对话框。
- 检查你的日志文件(
tail -f your_app/logs/development.log
); 确保您看到对相应路径的DELETE请求,并且它正在路由到相应的控制器操作。 - 删除对
@list.save
的第一次调用,只留下一个作为条件的一部分。 - 检查列表对象上的
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’