Rails 3中link_to删除destory方法是否调用show方法?

4

嘿,我看过几篇关于这个问题的帖子,但是在调用 :method => 'delete' 时仍然遇到了问题,导致重定向到我的控制器的 show 方法。 destroy 方法按预期工作,即删除评论,但是在请求完成后,会在 GET 上抛出404。这是代码:

<%= link_to 'delete', "/events/#{@event.id}/comments/#{comment.id}.js", 
        :confirm => 'Are you sure?', 
        :method => :delete, 
        :remote => true %>

以下是控制器方法:

def destroy 
  @comment = @event.comments.find(params[:id])
  @comment.destroy
  redirect_to do |format|
    format.html # redirect_to @event, :notice => "comment deleted" }
    format.js { render 'destroy.js.erb' }
  end
end

我听说这可能是由于没有使用button_to造成的,但是我已经尝试过使用button_to而不是link_to,但是结果仍然相同。

我也听说这可能是由于你在设置中使用jquery的方式存在问题,但我感觉不太可能。无论如何,以下是我调用jquery的方式(application.html.erb):

<%= javascript_include_tag 'jquery-1.5.2.min.js', 'rails', 'application' %>
  <%= javascript_include_tag 'jquery-ui-1.8.17.custom.min.js' %>

当我查看Rails服务器输出时,我看到它说:
Redirected to http://0.0.0.0:3000/events/1/comments/35
Completed 302 Found in 132ms
ACTION NAME application


Started GET "/events/1/comments/35" for 127.0.0.1 at Wed Feb 08 16:31:43 -0800 2012

AbstractController::ActionNotFound (The action 'show' could not be found for CommentsController):

谢谢您的帮助!

$("#<%= dom_id(@comment) %>").remove() 但我已经注释掉并进行了测试,问题仍然存在。 - botbot
答案是,当进行ajax删除请求时,您不能使用redirect_to,因为它会发出另一个请求并最终导致404错误,因为资源已经不存在了。 - botbot
4个回答

1
Rails 3.1及以上版本为我们清理了很多内容……rails.js已经消失。Jquery_ujs是gem的一部分,但该文件不应该在您的javascript目录中: 具体来说,我的jquery_ujs文件过时了,仍然存在于我的assets/javascript目录中。它仍然具有已弃用的.live方法。删除该文件!
保留gem 'jquery-rails','~> 2.1' # REF: https://github.com/rails/jquery-ujs 保留//= require jquery以及//= require jquery_ujs和//= require_tree。 在您的application.js文件中 确保您更新了gem并进行bundle install以获取最新的gem。 如果出现javascript错误(就像对我来说那样“隐蔽”),则link_to js的其余部分将无法工作。现在删除和确认对话框都可以正常工作。一个旧的jquery_ujs是罪魁祸首。

0

format.html 可能会导致这种情况。 请使用以下代码替换此行: format.html { render :nothing => true }


0
我会确保您的应用程序中有适当版本的rails.js。rails.js现在负责确保删除链接实际上使用删除方法,因此您可能需要更新rails.js文件。您正在运行哪个版本的rails?

Rails 3.1.0。我用最新的rails.js替换了它。由于我的应用实际上是一个Rails 3.0应用程序,我将其拉入了一个新的Rails 3.1.0环境中,我觉得rails.js可能不是最新的。但仍然得到相同的结果。删除操作已经完成,但重定向到控制器中的新方法仍在进行。 - botbot
如果删除成功,则 JS 不是问题。尝试移除 format.html 行,并查看是否可以解决问题。或者至少先放置 format.js 行。 - siannopollo
嘿,siannopollo,感谢你的建议。我注释掉了format.html这一行,但它仍然在尝试获取某些东西。我认为我错过了一些简单的东西,我相信它因某种原因重定向到show方法。我会继续挖掘。 - botbot

0
可能是你的config/routes.rb文件出了问题。如果在routes.rb文件中,先前的一项匹配了events/:id/comments/:id并指向comments#show,它可能会导致此错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接