【发布时间】:2023-03-30 10:02:01
【问题描述】:
这让我很恼火,我已经做了一个多小时了。也许你们中的一个人有一个想法。
我在 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)
- id (145) 存在,是的。
- 动作和控制器(动作:preview_revision,控制器:广告)也存在。
- 所有其他路线都运行良好
- 我已尝试多次重启服务器
- 我仔细检查了它实际上是一个 POST 请求,ID 是否正确,我真的不知道该怎么办了。
- Rails 版本是 3.0.1
--- 更新 ---
我尝试将方法从 POST 更改为 PUT,现在它可以工作了。显然,成员级别的 POST 路由不起作用或不允许。
不过,我想知道为什么。我确实知道 POST 用于创建成员,因此对成员的 POST 请求没有意义,但我在 Rails 指南中的任何地方都没有发现这一点,为什么rake routes 会显示路线,如果没有' t实际工作?这是一个错误吗?
--- 更新 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 或 delete。如果 您没有多个成员路线, 您还可以将 :on 传递给路线, 消除阻塞 [...]
那么会员上的 POST 是可能的还是不可能的?我错过了什么吗?只是说清楚,我不想再使用它了,但是,它仍然让我不知道为什么它不起作用。
【问题讨论】:
-
同样的问题一直让我发疯……有什么解决办法吗?
-
遇到了同样的问题 - 在 routes.rb 中使用 PUT 而不是 POST 修复了它。奇怪的是,在 form_for 中使用此路由的路径确实使用了 POST 方法。有什么想法吗?
标签: ruby-on-rails ruby-on-rails-3