我有一个控制器调用用户密码重置流的模型。它调用两种方法:
控制器
Password.new(@user)
.save_token_and_expiry
.email_reset
模型
module ModuleName
class Password
attr_accessor :token, :user
def initialize(user)
@token = SecureRandom.urlsafe_base64(ModuleName.configuration.reset_token_length, false)
@user = user
end
def save_token_and_expiry
User.find_by_email(@user['email'])
.update_attributes(password_reset_token: @token, password_token_expiry: ModuleName.configuration.password_token_expiry)
end
def email_reset
PasswordResetMailer.password_reset(@user, @token).deliver_now
end
end
end
输出
NoMethodError (undefined method `email_reset' for true:TrueClass):
第一个成功执行,但第二个失败。
为什么第二种方法会返回错误?
答案 0 :(得分:2)
您的public void onAudioData(byte[] data, int size) {
buffer.write(data);
}
}
方法会返回save_token_and_expiry
,您尝试调用true
方法,这显然会失败。如果你想允许这样的链接,你可以使email_reset
方法返回save_token_and_expiry
实例,它被调用:
Password
答案 1 :(得分:0)
Rails 对链接通话不太友好。 save_token_and_expiry
会返回最后一次调用操作的结果(update_attributes
),而update_attributes
不会返回调用它的目标,只是简单的true / false。这就是你有这样的错误的原因。如果要修复它,可以将save_token_and_expiry
方法重写为:
def save_token_and_expiry
User.find_by_email(@user['email']).update_attributes(password_reset_token: @token, password_token_expiry: ModuleName.configuration.password_token_expiry)
self
end
答案 2 :(得分:0)
您可以更改控制器代码:
@data = Password.new(@user)
@data.save_token_and_expiry
@data.email_reset