#動機
Railsにはdeviseという、ログイン機能を簡単に実装できる機能があります。deviseをインストールしてからrails generateでモデル作ってコントローラ、ビューを順に作成していきます。
便利ですが、ひとつ問題が。
サインインサインアウトの際のルーティングがusers/sign_inとかusers/sign_outとなるのが辛い。
例えばhogehoge.com/sign_inとしたいところが、hogehoge.com/users/sign_inとなります。deviseのデフォルト仕様です。
もし仮に、"sign_in"というユーザーがいたらコンフリクトしそうだから変えたいなー、ということでやっていきます。
#最初の考え
deviseひとつで複数モデルを管理する方法
動いていたコードでは単一モデルだったので/sign_inと/users/sign_inを分けられないかなと考えましたが、そうすると本来の目的から逸れてしまっているので今回は除外です。
#実装
official docを参考に、ルーティングの記述を変えていきましょう。
いくつか方法があるのですが、僕がとったのはpathを空にするやり方でした
- path: allows you to set up path name that will be used, as rails routes does.
The following route configuration would set up your route as /accounts instead of /users:
devise_for :users, path: 'accounts'
これを再現するとこう。accountsの部分を空にすれば、urlは/sign_inになります。
Rails.application.routes.draw do
devise_for :users, path: '', controllers: {
sessions: 'users/sessions',
.
.
.
}
devise_scope :user do
get '/sign_up/complete', to: 'users/registrations#complete'
.
.
.
end
#教訓
ドキュメントは常に確認しましょう