Ruby 1.9.2,Rails 3.1
这是我的routes.rb
resources :ads
我认为这个条目应该涵盖几乎任何将被置于/ ads URL下并在控制器中具有相应方法的内容。奇怪的是它适用于/ ads下的所有内容,但是当我尝试访问ads /:id / delete时收到错误: 没有路线匹配[GET]“/ ads / 50 / delete”
如果我添加显式条目
match 'ads/:id/delete' => 'ads#delete'
然后一切正常
从控制器输入
def delete
@ad=Ad.find(params[:id])
@ad.destroy
redirect_to '/ads'
end
a)我试图弄清楚为什么输入资源:广告不适用于/ ads /:id / delete b)任何关于调试路由问题的简单方法的指针都将不胜感激。
UPD: 耙路线的输出
c:\RailsInstaller\work\mebay>rake routes
ads GET /ads(.:format) {:action=>"index", :controller=>"ads"}
POST /ads(.:format) {:action=>"create", :controller=>"ads"}
new_ad GET /ads/new(.:format) {:action=>"new", :controller=>"ads"}
edit_ad GET /ads/:id/edit(.:format) {:action=>"edit", :controller=>"ads"}
ad GET /ads/:id(.:format) {:action=>"show", :controller=>"ads"}
PUT /ads/:id(.:format) {:action=>"update", :controller=>"ads"}
DELETE /ads/:id(.:format) {:action=>"destroy", :controller=>"ads"}
/ads/:id/delete(.:format) {:controller=>"ads", :action=>"delete"}
答案 0 :(得分:2)
生成的路由是“RESTful” - 因此,当您获得创建,更新,删除等记录的访问权限时,您必须确保使用正确的REST动词。在您的情况下,看起来您正在尝试向删除路径发送GET请求,这将无效。您需要发送DELETE请求。
如果您发布用于删除此链接的链接的实际代码,我们可以为您提供更具体的答案,但通常您的删除链接应如下所示:
<%= link_to "Delete", ad_path(@ad), :method => :delete %>
这会向/ ads /:id发送一个DELETE请求,Rails会知道应该调用您的destroy
操作。
@ Tilo答案中的官方Ruby on Rails路由指南是一个优秀的资源,您应该在继续之前阅读。