Rails返回DELETE视图的错误>没有路由匹配“/ assets”

当我点击“删除”链接(删除项目)时,我希望显示一个新页面供用户确认删除(“你确定”页面)。 但是当我点击链接时,错误没有路由匹配[GET]“/ assets”出现,我不知道为什么。 谁能帮我?

这是我的projects / index.html.erb

1  2  3  4  'delete', :controller => 'projects', :id => p.id } %> 5  

这是我的controllers / projects_controller.rb

  38 def delete 39 @project = Project.find(params[:id]) 40 render 'delete' 41 end 42 43 def destroy 44 project = Project.find(params[:id]) 45 project.destroy 46 flash[:notice] = "Page succesfully removed" 47 redirect_to(projects_path) 48 end 

这是我的views / projects / delete.html.erb

  1  {:action => 'destroy', :id => @project.id }) do |f| %> 2 

Are you sure you want to remove ""

3 <%= submit_tag ("Yes, I am sure") 4

编辑:我的url看起来像这样>>> http:// localhost:3000 / assets?action = delete&controller = projects&id = 1

EDIT2: 解决方案是route.rb并添加此行

  match ':controller(/:action(/:id))(.:format)' 

现在出现删除页面。 但是,当我单击删除按钮Rails返回错误>>未知操作无法找到ProjectsController的操作’6′

问题是这一行:

 <%= form_for(:project, :url => {:action => 'destroy', :id => @project.id }) do |f| %> 

在进行此操作时,您没有告诉它使用HTTP方法DELETE

 <%= form_for(:project, :url => {:action => 'destroy', :id => @project.id }, :method => :delete) do |f| %> 

你也可以写这么多,比这更短:

 <%= form_for(@project, :method => :delete) do |f| %> 

Rails将准确知道要构建的URL,因此您无需告诉它该做什么。


奖金

您也可以使用初始link_to执行此操作:

 <%= link_to "delete", [:delete, project], :method => :delete %> 

这里作为第二个参数的数组将使用Rails中的多态路由构建器编译路由。