2017-09-13 35 views
1

ルートの一部をどのようにして大文字にすることができますか?たとえば、私はscim/v2/userのルートを持っていますが、scim/v2/User(ユーザーは大文字)としたいと思います。 resourceをまだ使用しているときにどうすれば実現できますか?Railsで大文字と小文字を区別しないルート

ルートファイル:

namespace :scim, defaults: { format: :json } do 
    namespace :v2 do 
    resource :user, only: [:create, :update, :show] 
    end 
end 

私は$rake routesを実行すると、私はこれを取得:

     scim_v2_user POST    /scim/v2/user(.:format)               scim/v2/users#create {:format=>:json} 
           GET    /scim/v2/user(.:format)               scim/v2/users#show {:format=>:json} 
           PATCH    /scim/v2/user(.:format)               scim/v2/users#update {:format=>:json} 
           PUT    /scim/v2/user(.:format)               scim/v2/users#update {:format=>:json} 

私はルートは/scim/v2/Userであるか、またはそれらが同じまま持っている持っていますが、持っているのいずれかたい/scim/v2/Userから/scim/v2/userへのマッピング方法。デフォルトresourceことで

+0

あなたはこれをしないで、別のリダイレクトを作成することをお勧めします。 Googleなどの検索ボットが異なるケース(例:そのようなURLをブログやフォーラムなどの他のサイトに置いた場合など)でページを検索すると、ページが混乱することがあります。 –

答えて

1

は、リソース名とコントローラの間の直接マッピングを望んでいるが、あなたはこれを回避するために使用して、大文字のリソース名を簡素化し、手動でコントローラを指定することができます。

namespace :scim, defaults: { format: :json } do 
    namespace :v2 do 
     resource :User, :controller => 'users', only: [:create, :update, :show] 
    end 
    end 

を生成します
 Prefix Verb URI Pattern    Controller#Action 
scim_v2_User GET /scim/v2/User(.:format) scim/v2/users#show {:format=>:json} 
      PATCH /scim/v2/User(.:format) scim/v2/users#update {:format=>:json} 
      PUT /scim/v2/User(.:format) scim/v2/users#update {:format=>:json} 
      POST /scim/v2/User(.:format) scim/v2/users#create {:format=>:json} 
+0

あなたのソリューションとここに記載されているソリューションの違いは何ですか:http://gehling.dk/2010/02/how-to-make-rails-routing-case-insensitive/ あなたのように思えますが、ミドルウェアを操作する必要はありません。 – Cyzanfar

+1

その解決策は、ミドルウェアを使用して、柵のルーティングを持つサルを使用することです。私は常に別のソリューションを重ねるのではなく、レールの中でこれを解決することを好みます。 'User'と' user'の両方をサポートしなければならない場合は、必ずあなたの質問には指定していません。 –

+0

これは大文字と小文字が区別されますが、別の選択肢(例: '/ scim/v1/User ')だけでも、[rails downcaser](https://github.com/substancelab/route_downcaser) '/ scim/v1/user'ではなく' '/ scim/v1/user')ではなく、'/scim/v1/user'は動作しません。小文字にする(大文字と小文字を区別しないが、大文字小文字を区別しない)。 –

0

pathcontrollerを手動で指定することでこれを解決できました。私はpathのユーザ(大文字)になるように指定しました。以下は私のルートファイルのコードです:

namespace :scim, defaults: { format: :json } do 
    namespace :v2 do 
     resources :user, 
     path: "Users", 
     controller: "users", 
     only: [:create, :update, :index, :show] 
    end 
    end 
関連する問題