0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

devise_for, devise_scopeの使い方

Posted at

Railsアプリにdeviseを導入すると、routes.rbにこのように書いたりする。

routes.rb
  devise_for :users, controllers: {
    sessions: 'users/sessions',
    registrations: 'users/registrations',
  }

  devise_scope :user do
    get 'signup', to: 'users/registrations#new', as: :signup
    get 'login', to: 'users/sessions#new', as: :login
    delete 'logout', to: 'users/sessions#destroy', as: :logout
  end

devise_fordevise_scopeとは?その使い分けは? を整理した。

devise_for, devise_scope = devise独自のルート定義メソッド

devise_for, devise_scope = ActionDispatch::Routing::Mapperクラスのメソッド。

Routing::Mapperクラスには、Rails.application.routes.draw do ... endブロック内で使える、ルート定義を行うメソッドたちが含まれる。

get, delete, resourcesなどのRails標準搭載のRouting::Mapperクラスのメソッドに追加して、devise独自のメソッドとしてdevise_for, devise_scope などが定義されている。

devise_fordevise_scopeの使い分け

結論
devise_forで標準ルーティングを一括生成して、さらに必要なカスタムルーティングをdevise_scopeで生成する。

devise_for 詳細

devise_for: deviseを使うモデル (Userなど) で定義したmodule (e.g. registerable, validatable) をもとに、deviseの標準的なルーティングを一括生成。モデル, パス, コントロール etc.の指定ができる。
(devise_forの内部ではdevise_scopeを呼んでいる)

devise_for :resources

# example
devise_for :users do
	class_name: 'Account', # モデルの指定 User -> Account
	# --- or --- 
	path: 'accounts', # パスの指定 /users -> /accounts
	# --- or --- 
	controllers: { sessions: 'users/sessions' } # コントローラの指定 devise/sessions -> users/sessions
end

参考:devise rubydoc > devise_for

devise_scope 詳細

devise_scope: 新たにdevise関連のルーティングを追加する時に使う。パスとcontroller#actionを対応付ける。
(scope = deviseを使っているモデルに対応した識別子)

devise_scope :scope do 
	get '/some/route', to: 'some_devise_controller#action', as: :some_path_name
end

# `as`がエイリアスメソッドなので下記のようにも書ける
as :user do
	get 'login', to: 'devise/sessions#new', as: :login
end

参考:devise rubydoc > devise_for

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?