【问题标题】:Rails returns error for DELETE view > No route matches [GET] "/assets"Rails 为 DELETE 视图返回错误 > 没有路由匹配 [GET] "/assets"
【发布时间】:2012-03-15 00:10:36
【问题描述】:

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

这是我的项目/index.html.erb

  1   <% @projects.each do |p| %>
  2       <%= link_to p.name, project_path(p) %>
  3       <%= link_to "edit", edit_project_path(p) %> 
  4       <%= link_to "delete",{ :action => 'delete', :controller => 'projects', :id => p.id } %> 
  5   <% end %>

这是我的控制器/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

这是我的意见/项目/delete.html.erb

  1 <%= form_for(:project, :url => {:action => 'destroy', :id => @project.id }) do |f| %> 
  2   <p>Are you sure you want to remove "<%= @project.name %>"</p>
  3   <%= submit_tag ("Yes, I am sure")
  4 <% end %>

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

EDIT2:解决方案是转到 routes.rb 并添加这一行

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

现在出现删除页面。 但是,当我单击删除按钮时,Rails 会返回错误 >> Unknown action The action '6' could not be found for ProjectsController

【问题讨论】:

  • 您需要在问题中包含您的删除视图。
  • 谢谢。您对如何解决这个问题有任何想法吗?
  • 不,我的意思是您需要在问题中而不是标题中发布删除视图的代码。
  • 需要看看你的 routes.rb
  • 我进去并取消了这一行的注释 >> match ':controller(/:action(/:id(.:format)))' 现在“你确定”页面显示,但是,当我单击 submit_tag("Yes,I am sure") 时,它返回 >> Unknown action The action '6' could not be found for ProjectsController

标签: ruby-on-rails


【解决方案1】:

问题出在这一行:

<%= 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 中的多态路由构建器编译路由。

【讨论】:

  • 谢谢!像魅力一样工作:)
猜你喜欢
  • 1970-01-01
  • 2014-06-28
  • 2013-01-15
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 2013-07-19
相关资源
最近更新 更多