这让我很恼火,而且我已经待了一个多小时了。也许你们其中一个人有一个想法。
我在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)
---更新---
我尝试将方法从POST更改为PUT,现在它可以正常工作。显然,成员级别的POST路由不起作用,或者不允许。
不过,我想知道原因。我知道POST是用于创建成员的,因此对成员的POST请求没有意义,但我没有在Rails指南中的任何地方找到这个,为什么rake routes
会显示路由,如果它实际上没有用?这是一个错误吗?
---更新2 ---
Rails路由指南(Edge版)具体说:
2.9.1添加成员路由
要添加成员路线,只需添加一个 成员块进入资源块:
resources :photos do member do get 'preview' end end
这将识别/ photos / 1 / preview 使用GET,并路由到预览 PhotosController的动作。它会 还创建了preview_photo_url和 preview_photo_path助手。
在会员路线的范围内, 每个路由名称指定HTTP 它会识别的动词。您可以 使用get,put,发布,或在此处删除。如果 你没有多条成员路线 你也可以通过:路线, 消除块[...]
成员的POST可能或不可能吗?我错过了什么吗?为了清楚起见,我不想再使用它,但是,它仍然让我不知道为什么它不起作用。
答案 0 :(得分:1)
如果您在积极维护的开源软件中发现错误,最好的办法是:
Rails的错误跟踪器位于rails.lighthouseapp.com。
--- ---编辑
Rails的错误跟踪器现在位于github.com/rails/rails/issues。
答案 1 :(得分:0)
这应该有效。我用3.0.1创建了一个空白的应用程序,并添加了这些路线,但它确实有效。
你试过传递:on param吗?类似的东西:
resources :ads do
post :preview_revision, :on => :member
get :revise, :on => :member
get :search, :on => :collection
post :preview, :on => :collection
end