Rails 3 link_to删除destroy方法调用show方法?

时间:2012-02-09 00:34:15

标签: ruby-on-rails-3

嘿,我已经看到了几个帖子,但我仍然遇到调用问题:method => '删除'并定向到我的控制器的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中调用的方式以防万一(应用程序。 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):

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

Rails 3.1及更高版本为我们清理了很多... rails.js已经不见了。 Jquery_ujs是gem的一部分,但该文件不应该在您的javascript目录中: 具体来说,我的jquery_ujs文件很旧,仍然“生活”在我的assets / javascript目录中。它仍然有不推荐使用的.live方法。删除文件!!
保持宝石'jquery-rails','〜&gt; 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是罪魁祸首。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的config/routes.rb文件可能存在问题。如果routes.rb文件中的较早条目与events/:id/comments/:id匹配并指向comments#show,则可能会导致此错误。

答案 3 :(得分:0)

format.html可能会导致它。 用这个改变这一行 format.html { render :nothing => true }