Rails 3.0.1中的奇怪路由错误

M. *_*her 5 ruby-on-rails ruby-on-rails-3

这让我很恼火,而且我已经待了一个多小时了.也许你们其中一个人有个主意.

我在routes.rb中定义了以下路由:

resources :ads do
  member do
    post :preview_revision
    get :revise
  end
  collection do
    get :search
    post :preview
  end
end

当我运行时rake routes,preview_revision路由正确显示:

preview_revision_ad POST   /ads/:id/preview_revision(.:format) {:action=>"preview_revision", :controller=>"ads"}

但是,当我向/ ads/145/preview_revision发出POST请求时,出现以下错误:

Started POST "/ads/145/preview_revision" for 127.0.0.1 at Mon Nov 15 17:45:51 +0100 2010

ActionController::RoutingError (No route matches "/ads/145/preview_revision"):


Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.2ms)
Run Code Online (Sandbox Code Playgroud)
  • id(145)存在,是的.
  • 操作和控制器(操作:preview_revision,controller:ads)也存在.
  • 所有其他路线都完美无缺
  • 我尝试过多次重启服务器
  • 我仔细检查了它实际上是一个POST请求,ID是正确的,我真的不知道该怎么做了.
  • Rails版本是3.0.1

---更新---

我尝试将方法从POST改为PUT,现在它可以工作了.显然,成员级别的POST路由不起作用,或者不允许.

不过,我想知道原因.我知道POST是用于创建成员的,因此对成员的POST请求没有任何意义,但我没有在Rails指南中的任何地方找到这个,为什么会rake routes显示路由,如果它实际上不起作用?那是一个错误吗?

---更新2 ---

Rails路由指南(Edge版)具体说:

2.9.1添加成员路由

要添加成员路由,只需将成员块添加到资源块中:

resources :photos
  do   member do
    get 'preview'
  end
end

这将通过GET识别/ photos/1/preview,并路由到PhotosController的预览操作.它还将创建preview_photo_url和preview_photo_path助手.

在成员路由块中,每个路由名称指定它将识别的HTTP谓词.您可以在此处使用get,put,post或delete.如果你没有多个成员路由,你也可以传递:on到一个路由,消除阻塞[...]

成员的POST可能或不可能吗?我错过了什么吗?为了清楚起见,我不想再使用它,但仍然,它让我不知道为什么它不起作用.

yfe*_*lum 1

如果您在积极维护的开源软件中发现错误,最好的做法是:

  • 向项目的错误跟踪器提交错误报告,尽可能多地隔离问题并提供尽可能详细的信息,并且(可选)
  • 如果可以的话,包括修复错误的补丁。

Rails 的错误跟踪器位于rails.lighthouseapp.com

- -编辑 - -

Rails 的错误跟踪器现在位于github.com/rails/rails/issues