0

アプリケーションを Rails 2 から Rails 3 に移行して
います。異なる名前空間を持つ複数の名前空間コントローラーがあります。それらは RESTfull ではないので、リソース ルーティングを使用したくありません。代わりに、古い Rails 2 のように名前空間付きのコントローラーを取得する「:controller/:action」に一致させたいと考えています。

私のroutes.rbには

# Install the default route as the lowest priority.
match ':controller(/:action(/:id(.:format)))'
match ':controller(/:action(/:id(.:format)))', :controller => /[^\/]+\/[^\/]+/

レーキ ルートレポート

/:controller(/:action(/:id(.:format)))          :controller#:action
/:controller(/:action(/:id(.:format)))          (?-mix:[^\/]+\/[^\/]+)#:action

/config/companys/indexへのリクエストはまだ失敗します

ActionController::RoutingError (No route matches [GET] "/config/companies/index"):

私は何を間違っていますか?動的セグメントを使用して名前空間ルートを取得する別の方法はありますか? 名前空間と動的セグメントとの一致を一緒に使用しようとすると、エラーがスローされます。

:controller segment is not allowed within a namespace block
4

1 に答える 1

0

問題が見つかりました。
Config は Rails の予約済み定数で、RbConfig を指します。私の一致条件は実際には機能しますが、もちろん存在しない RbConfig::CompaniesController を呼び出そうとします。

追加しようとしたところ

match '/:controller(/:action(/:id(.:format)))', :controller => /config\/[^\/]+/

エラーは

ActionController::RoutingError (uninitialized constant RbConfig::CompaniesController)

解決策: app/controllers/config -> app/controllers/configuration (およびビュー フォルダー) の名前を変更し、ルーティングにリダイレクトを追加してレガシー リンクを処理します。

match '/config/*path' => redirect("/configuration/%{path}")
于 2013-01-04T01:35:56.967 に答える