0

我的一个模型中包含一个模块。包含在我的用户模型 database_authenticable 中。

devise  :database_authenticatable

该模块有一个方法valid_password?(密码)我想覆盖该方法如下

def valid_password?(password)
  if my_condition_is_true
    do_something_new()
  else
    # do  what valid_password(password) always does
  end
end

在我的 else 中,我正在考虑复制 database_authenticable.rb 模块中 valid_password() 中定义的任何内容,但我想知道是否有办法告诉它这样做?就像在继承中我可以做的超级?

我也没有意识到,在调用我的 valid_password 方法后,它调用了模块 valid_password 方法,知道如何避免这种情况吗?

4

1 回答 1

1

您可以将您的修改编写为一个模块并将其包含在内,这样它的加载方式与使用先前方法的模块的加载方式类似。如果你能做到这一点,你应该能够super正确调用。

看看这个线程的一些想法(当然,这取决于你的代码的其余部分如何):Rails 3: alias_method_chain 还在使用?

于 2012-08-28T01:15:03.520 回答