奇怪的路由问题

时间:2011-11-18 01:54:20

标签: ruby-on-rails-3

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"}

1 个答案:

答案 0 :(得分:2)

生成的路由是“RESTful” - 因此,当您获得创建,更新,删除等记录的访问权限时,您必须确保使用正确的REST动词。在您的情况下,看起来您正在尝试向删除路径发送GET请求,这将无效。您需要发送DELETE请求。

如果您发布用于删除此链接的链接的实际代码,我们可以为您提供更具体的答案,但通常您的删除链接应如下所示:

<%= link_to "Delete", ad_path(@ad), :method => :delete %>

这会向/ ads /:id发送一个DELETE请求,Rails会知道应该调用您的destroy操作。

@ Tilo答案中的官方Ruby on Rails路由指南是一个优秀的资源,您应该在继续之前阅读。