2014-02-11 5 views
4

У меня есть приложение rails, которое настроено на использование ActiveAdmin и Devise.Как переопределить действия PasswordsController в приложении rails с ActiveAdmin & Devise

Я хочу, чтобы переопределить редактировать и обновления действия в PasswordsController. Насколько я могу судить, ActiveAdmin полагается на PasswordsController от Devise.

Нужно ли использовать метод ActiveAdmin для настройки контроллера/ресурса для этого? Если да, то какой ресурс находится в игре, чтобы «зарегистрироваться» для PasswordsController?

Или мне нужно скопировать весь PasswordsController от Devem из драгоценного камня в место где-нибудь в моем приложении и изменить действия, которые я хочу изменить? Если да, то в какую папку я бы поставил свою копию контроллера Devise, чтобы он переопределял версию gem?

Каков правильный способ сделать это?

+1

Что вы пытаетесь выполнить, точно? Каким образом вы хотите его изменить? – seanlinsley

+0

Ну, в этом случае я хочу выставить сигнал перед сбросом пароля, а затем изменить перенаправление после сброса пароля, чтобы перейти на другую страницу в зависимости от роли пользователя и убедиться, что она не автозаписывается после сброса, так как Что ж. Однако этот вопрос можно считать более общим, чем это, поскольку я могу переопределить/изменить/изменить другие подобные действия в аналогичных контроллерах, которые обрабатываются как активным админом, так и разрабатываются. – Streamline

ответ

4

Весь кода DEViSE связанных живет в lib/active_admin/devise.rb, в том числе этих определений контроллера:

module ActiveAdmin 
    module Devise 

    class SessionsController < ::Devise::SessionsController 
     include ::ActiveAdmin::Devise::Controller 
    end 

    class PasswordsController < ::Devise::PasswordsController 
     include ::ActiveAdmin::Devise::Controller 
    end 

    class UnlocksController < ::Devise::UnlocksController 
     include ::ActiveAdmin::Devise::Controller 
    end 

    class RegistrationsController < ::Devise::RegistrationsController 
     include ::ActiveAdmin::Devise::Controller 
    end 

    class ConfirmationsController < ::Devise::ConfirmationsController 
     include ::ActiveAdmin::Devise::Controller 
    end 

    end 
end 

Вы должны быть в состоянии обезьяны патча PasswordsController изменить свое поведение внутри вашего приложения:

# config/initializers/active_admin_devise_sessions_controller.rb 
class ActiveAdmin::Devise::PasswordsController 

    # ... 

end 
+0

приведенное выше решение работает для меня, но я могу только пропустить создание контроллера сеансов. Мне нужно сделать двухэтапную аутентификацию при входе в систему. Я не могу добавлять новые методы и создавать новые формы. может помочь? –

Смежные вопросы