Я подкласс Devise::PasswordsController
https://github.com/plataformatec/devise/blob/master/app/controllers/devise/passwords_controller.rb
class MyPasswordsController < Devise::PasswordsController
protected
# Reference: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/passwords_controller.rb
def unlockable?(resource)
v = resource.respond_to?(:unlock_access!) &&
resource.respond_to?(:unlock_strategy_enabled?)
# && resource.unlock_strategy_enabled?(:none) # sets to :none
puts "##############################"puts v
puts "##############################"
return v
end
end
У меня также есть маршруты:
devise_for :users, :controllers => {:passwords => :my_passwords}
Я уверен в том что Devise::PasswordsController::update
называется, но почему бы рубину не поднять мой MyPasswordsController::unlockable?
метод (он должен быть вызван в update
метод?
РЕДАКТИРОВАТЬ
То, что я пытаюсь сказать, это следующий код на C ++. Ruby ведет себя по-другому?
#include <iostream>
using namespace std;
class Base
{
public:
virtual void VirtualMethod()
{
cout << "Base::VirtualMethod" << endl;
VirtualMethodSub();
}
virtual void VirtualMethodSub()
{
cout << "Base::VirtualMethodSub" << endl;
}
};
class Dervied : public Base
{
virtual void VirtualMethodSub()
{
cout << "Derived::VirtualMethodSub" << endl;
}
};
int main()
{
Dervied d;
d.VirtualMethod();
return 0;
}
/* Output:
Base::VirtualMethod
Derived::VirtualMethodSub
*/
Вы просматриваете хит PasswordsController # update. Не MyPasswordsController # обновление. Так что реализуйте свой собственный PasswordsController, расширяясь от контроллера Devise :: Passwords.
class PasswordsController < Devise::PasswordsController
protected
def unlockable?(resource)
end
end
И в вашем конфиге / rout.rb, Добавить
devise_for :users, :controllers => {:passwords => 'passwords'}
Если ваш ресурс не является пользователем, замените его на имя ресурса.
Оказывается, я использую Devise 2.1.2 и ссылку:
https://github.com/plataformatec/devise/blob/master/app/controllers/devise/passwords_controller.rb
для последней версии Devise.