3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

/users/sign_in→/sign_inのようにURLを変更したい

Last updated at Posted at 2019-02-05

#動機
Railsにはdeviseという、ログイン機能を簡単に実装できる機能があります。deviseをインストールしてからrails generateでモデル作ってコントローラ、ビューを順に作成していきます。

deviseのGitHub

便利ですが、ひとつ問題が。

サインインサインアウトの際のルーティングが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を参考に、ルーティングの記述を変えていきましょう。

repository wiki
ruby 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になります。

routes.rb
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

#教訓
ドキュメントは常に確認しましょう

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?