我正在深入研究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”操作。另外,我注意到浏览器没有显示确认消息“你确定吗?”无论是。什么可能导致这个或我缺少什么的想法?
非常感谢!
答案 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
。