Deviseのコントローラーは自動的に生成されますか?どのようにしてそれらにアクセスしますか?
あなたが行うビューについては知っていますRails generate devise_views
。
Deviseは内部コントローラーを使用します。これは、独自のコードでアクセスしてサブクラス化できます。それらはDevise
モジュールの下にあります。たとえば、RegistrationsController
を拡張するには:
class MembershipsController < Devise::RegistrationsController
# ...
end
あとは、コントローラーを使用するようにDeviseのルートを構成するだけです。
devise_for :members, :controllers => { :registrations => 'memberships' }
これらのコントローラーを変更またはオーバーライドするためにこれらのコントローラーを表示するという前提の下で、Deviseはこれを簡単にするためにアプリでコントローラーを再作成するシンプルなジェネレーターを提供するようになりました。 ドキュメント に従って(これは最新のものになります):
1)スコープを必要とするジェネレーターを使用してカスタムコントローラーを作成します:
コンソール
Rails generate devise:controllers [scope]
users
をスコープとして指定すると、コントローラーはapp/controllers/users/
に作成されます。セッションコントローラーは次のようになります。
class Users::SessionsController < Devise::SessionsController
# GET /resource/sign_in
# def new
# super
# end
...
end
2)このコントローラーを使用するようにルーターに指示します:
devise_for :users, controllers: { sessions: "users/sessions" }
3)devise/sessions
からusers/sessions
にビューをコピーします。コントローラーが変更されたため、devise/sessions
にあるデフォルトのビューは使用されません。
4)最後に、目的のコントローラーアクションを変更または拡張します。
コントローラーアクションを完全にオーバーライドできます。
class Users::SessionsController < Devise::SessionsController
def create
# custom sign-in code
end
end
または、単純に新しい動作を追加できます:
class Users::SessionsController < Devise::SessionsController
def create
super do |resource|
BackgroundWorker.trigger(resource)
end
end
end
これは、特定のアクション中にバックグラウンドジョブをトリガーしたり、イベントを記録したりするのに役立ちます。
Deviseはフラッシュメッセージを使用して、サインインが成功したか失敗したかをユーザーに知らせることに注意してください。 Deviseは、アプリケーションが必要に応じてflash[:notice]
およびflash[:alert]
を呼び出すことを期待しています。フラッシュハッシュ全体を印刷せず、特定のキーのみを印刷します。状況によっては、Deviseは:timedout
キーをフラッシュハッシュに追加しますが、これは表示用ではありません。ハッシュ全体を印刷する場合は、このキーをハッシュから削除します。
$ Rails generate devise:controllers SCOPE [options]
オプション:-c、[-controllers = one two three]
-cを使用して、上書きするコントローラーを指定します。コントローラーを指定しない場合、すべてのデバイスコントローラーが作成されます。例えば:
Railsはdevise:controllersユーザーを生成します-c = sessions
これにより、app/controllers/users/sessions_controller.rbに次のようなコントローラークラスが作成されます。
class Users::ConfirmationsController < Devise::ConfirmationsController
content...
end
以下はRails 5の場合
次のコマンドを使用して、Railsコントローラーを作成します。
Rails generate devise:controllers users
上記の生成されたコントローラーを変更した場合、次の行をroutes.rb
、
devise_for :users, controllers: {registrations:'user/registrations'}
Railsサーバーを再起動すると、変更が有効になります
@ErikTrautmanの答えをご覧ください。
ソースを検査する必要があります(具体的には、プロジェクトルートのapp/
ディレクトリ)。 @MatheusMoreiraはGitHubのソースへのリンクを提供しますが、独自のテキストエディターでローカルに閲覧したい場合は、gem which devise
でDevise gemのインストール場所を見つけることができます。
たとえば、Devise::SessionsController
を表示するには:
$ vim $(gem which devise | sed 's|\(.*\)\(/.*\)\{2\}|\1|')/app/controllers/devise/sessions_controller.rb
(または、gitリポジトリのクローンを作成し、その方法で突くだけでもかまいません。)
$ git clone https://github.com/plataformatec/devise
$ cd devise
$ vim app/controllers/devise/sessions_controller.rb