0

iOS6のPassbookがサーバーにHTTPDELETEルートを送信すると、「ルートが一致しません」というメッセージが表示されます。

config / routers.rbでは、ルートは次のようになります。

delete       "/v1/devices/:device_id/registrations/:pass_type_id/:serial_number" => "registrations#destroy"

「レーキルート」を実行すると、ルートがそこにあることがわかります。

 DELETE /v1/devices/:device_id/registrations/:pass_type_id/:serial_number(.:format) {:controller=>"registrations", :action=>"destroy"}

しかし、ルートがRails3.0.3開発サーバーに入ると

Started DELETE "/v1/devices/515a5c955dcdd66f558e1b4041392bf3/registrations/pass.com.myserver.FreeDrink/11" for 192.168.0.22 at 2012-12-23 15:03:25 -0500

Railsサーバーは次のように述べています。

 ActionController::RoutingError (No route matches "/v1/devices/515a5c955dcdd66f558e1b4041392bf3/registrations/pass.com.myserver.FreeDrink/11"):
actionpack (3.0.3) lib/action_dispatch/middleware/show_exceptions.rb:53:in `call'
railties (3.0.3) lib/rails/rack/logger.rb:13:in `call'
rack (1.2.4) lib/rack/runtime.rb:17:in `call'
activesupport (3.0.3) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.2.4) lib/rack/lock.rb:11:in `block in call'
<internal:prelude>:10:in `synchronize'
rack (1.2.4) lib/rack/lock.rb:11:in `call'
actionpack (3.0.3) lib/action_dispatch/middleware/static.rb:30:in `call'
railties (3.0.3) lib/rails/application.rb:168:in `call'
railties (3.0.3) lib/rails/application.rb:77:in `method_missing'
railties (3.0.3) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.2.4) lib/rack/content_length.rb:13:in `call'
rack (1.2.4) lib/rack/handler/webrick.rb:52:in `service'
/home/user/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/home/user/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/home/user/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'

HTTP GETおよびPOSTを使用する他のすべてのルートは、正常に機能します。これは私が問題を抱えている唯一のルートです。一部のブラウザはHTTPDELETEを送信せず、HTTPGETとHTTPPOSTのみを送信し、railsはリクエストが削除であることを示すためにヘッダーに何かを入れますが、HTTP DELETEリクエストを送信しているのはPassbookなので、それが問題と関係があるかどうかはわかりません。

また、config/routes.rbで次のような他のフレーバーのルートも試しました。

match "/ v1 / devices /:device_id / registerrations /:pass_type_id /:serial_number" => "registrations#destroy"、:via =>:delete

また、他のコントローラーを使用してみました。

リクエストがHTTPDELETEの場合、Railsが「ルートが一致しない」と言う理由を知っている人はいますか?

4

1 に答える 1

0

この投稿のルートを使用して、最終的に削除ルートを機能させることができました

 delete       "/v1/devices/:device_id/registrations/:pass_type_id/:serial_number" => "users#delete_pass", :constraints => { :pass_type_id => /[^\/]+/ }

制約が追加されています:

:constraints => { :pass_type_id => /[^\/]+/ }
于 2012-12-26T02:34:21.697 に答える