为什么我的Rails Web应用程序调用了错误的操作?

时间:2010-10-21 04:53:53

标签: ruby-on-rails routes

我正在深入研究Ruby on Rails,我遇到了一个奇怪的错误,使用Rails 3.0.1和Ruby 1.8.7。使用生成的脚手架代码,当我期待我的“Destroy”动作被调用时,我的“Show”动作就会被调用。这是代码......

的routes.rb

webappdotcom::Application.routes.draw do
  resources :projects
  root :to => "home#index"
end

index.html.erb

<td><%= link_to 'Destroy', project, :confirm => 'Are you sure?', :method => :delete %></td>

在浏览器中呈现的实际HTML代码

<td><a href="/projects/12" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a></td>
单击“销毁”链接时

服务器输出

Started GET "/projects/12" for 127.0.0.1 at Wed Oct 20 23:39:37 -0500 2010
  Processing by ProjectsController#show as HTML
  Parameters: {"id"=>"12"}
  Project Load (0.1ms)  SELECT "projects".* FROM "projects" WHERE ("projects"."id" = 12) LIMIT 1
Rendered projects/show.html.erb within layouts/application (9.0ms)
Completed 200 OK in 77ms (Views: 13.3ms | ActiveRecord: 0.1ms)

您可以看到正在调用“ProjectsController#show”操作,但我希望调用“Destroy”操作。另外,我注意到浏览器没有显示确认消息“你确定吗?”无论是。什么可能导致这个或我缺少什么的想法?

非常感谢!

2 个答案:

答案 0 :(得分:3)

这是因为Rails 3改变了它在表单中使用javascript的方式。它曾用于向链接添加onclick方法,但这违反了不引人注目的JavaScript。现在它只是设置一些标签属性,并在另一个文件中使用javascript挂钩。

该页面的布局(可能是application.html.erb,除非你已经改变了它)需要在head部分中包含这一行:

<%= javascript_include_tag :defaults %>

如果您的布局中缺少此行,那就是问题所在。另一个可能的原因可能是如果您已经将jQuery库添加到您的应用程序而不添加特定于rails的jQuery库。让我知道这是如何工作的。

答案 1 :(得分:1)

这可能对您有所帮助link_to with :method=>:delete not working ( Rails 3 )。虽然在那篇文章中edit被调用了。但该解决方案也适用于show