我繼承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
*/
我已經有了路線。只是讓你知道,如果我重寫'Devise :: PasswordsController :: update',它被調用,並且我的'unlockable?'也被調用。但我不想重寫'update',因爲'super :: update'是我需要的。 –