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)
---更新---
我尝试将方法从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可能或不可能吗?我错过了什么吗?为了清楚起见,我不想再使用它,但仍然,它让我不知道为什么它不起作用.
如果您在积极维护的开源软件中发现错误,最好的做法是:
Rails 的错误跟踪器位于rails.lighthouseapp.com。
- -编辑 - -
Rails 的错误跟踪器现在位于github.com/rails/rails/issues。