Devise で devise_for メソッドによるルーティングを確認

スポンサーリンク

前回 devise で認証機能を追加したので(Rails4 にて Devise でユーザー登録・ログイン認証・認可の機能を追加 | EasyRamble)、devise で生成されたデフォルトのルーティングを確認してみました。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

環境
Rails 4.0.1
Devise 3.2.2

config/routes.rb は以下のとおり。

devise_for メソッドによるルーティングを確認

なかなかカオスな感じ。

RESTful じゃないルーティングになっている

devise_for メソッドによるデフォルトでは、RESTful でないルーティングになってますね…。おかしい点を列挙すると、

・/users/.. の URI が devise/ 以下のコントローラーにルーティングされている。
・/users/.. の URI が devise/sessions コントローラーのアクションにルーティング。普通 /sessions/new などの URI に対応するのでは。
・devise/registrations は URI Pattern に出てこない。
・devise/registrations#edit は、/users/:id/edit にルーティングされるべきでは。devise/passwords#edit も同様。
・PATCH, PUT, DELETEリクエスト の URI Pattern は、通常 /users/:id などにルーティングされないといけない。

Rails のルーティング、というか REST な URI パターンを、英語の単数形・複数形とアクションが及ぼす対象を意識して覚えているので、この devise のルーティングはちょっと気持ち悪いです。

resources :users による通常のルーティング

devise を使わずに普通に、resources :users とルーティングした場合は以下のようになって美しいです。

Devise との対応は以下のようになる。

users#index  → なし
users#create → devise/registrations#create
users#new   → devise/registrations#new
users#edit  → devise/registrations#edit
users#show  → なし
users#update → devise/registrations#update
users#destroy → devise/registrations#destroy

users#index, users#show のルーティングは Devise により生成されていないので、自力でルーティングを作る必要があります。普通に、resources :users とすると、devise_for :users で自動生成されるルーティングと衝突して訳が分からなくなりそうです。users#index, users#show のルーティングは1つずつ作ったほうが良さそう。

以上を考慮して、さてどうしましょうか。devise_for メソッドを使わずにルーティングを全部一から自分で作るか(動作するか不明)、プラグインを使う利便性と割りきって利用するかどちらかですかね。また、Devise コントローラーを継承したカスタムコントローラーを作成して、ルーティングがどう変わるか試してみよう。

ググったらルーティングを変更する gem を作っておられる方を発見しました。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!