我正在使用 FLEX 3 向 Rails 3 发出 XML 请求。由于 FLEX 3 仅提供 POST 和 GET,因此我必须使用“?_method=PUT” hack 来保持适当的 REST 性:
http://127.0.0.1:3000/locator/locator_users/1.xml?_method=PUT
在服务器端,它显示为 POST,我收到一个 ActionController::RoutingError(没有路由匹配)。
我做了一个 rake 路由,路由就在那里,命名空间正确等等。 这在 Rails 2 中运行得很好,所以我有理由相信一定是 Rails 3 发生了变化。经过一番搜索后,人们似乎表示它应该仍然有效。但是,这不适合我。谁能确认或否认 Rails 3 兼容性?
更新
好吧,经过一番修改,我认为这实际上是 Flash Player 10 的问题。Flash PLayer 9 似乎可以很好地使用“_method=” hack,但 10 则不行。请参阅我写的这篇新文章 ( Flash Player 9 vs Flash Player 10 with FLEX 3, ?_method=PUT/DELETE not working? )。
最佳答案
这部分是由于 Rack::MethodOverride
的行为造成的。它不会检查 _method
的查询参数,因此调用 http://127.0.0.1:3000/locator/locator_users/1.xml?_method=PUT
因此不会被正确覆盖。
我写了一个piece of Rack middleware替换它来解决这个特定问题。
你所要做的就是
将其添加到Gemfile
gem 'rack-methodoverride-with-params'
在 config/environment.rb
中交换 Rack::MethodOverride
config.middleware.swap Rack::MethodOverride, Rack::MethodOverrideWithParams
关于ruby-on-rails - Rails 3 "_method=PUT"仍然可以工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732183/