设计 - NoMethodError未定义的方法`+'对于NilClass

时间:2014-12-10 12:47:29

标签: ruby-on-rails devise

尝试重置密码我收到错误NoMethodError未定义的方法`+'对于NilClass。我想这可能是由于设计方法

def confirmation_period_expired?
      self.class.confirm_within && (Time.now > self.confirmation_sent_at + self.class.confirm_within )
end

因为在db中,confirmation_sent_at仍然为零。我想知道为什么

def generate_confirmation_token
      self.confirmation_token = self.class.confirmation_token
      self.confirmation_sent_at = Time.now.utc
end

没有设置confirmation_sent_at。不知道为什么,但是没有调用generate_confirmation_token。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

尝试

def generate_confirmation_token
 self.confirmation_token = self.class.confirmation_token
 self.confirmation_sent_at = Time.now.utc
 # you dont save your instance
 save
 # now saved
end

答案 1 :(得分:0)

可能你有错误

 def confirmation_period_expired?
   total_sent_at = (self.confirmation_sent_at.nil? ||  self.class.confirm_within.nil?) ? 0.0 : (self.confirmation_sent_at +  self.class.confirm_within)
  self.class.confirm_within && (Time.now > total_sent_at )
end

您也可以使用try

答案 2 :(得分:0)

这是Devise的旧版本。在以前的Devise版本(< 3.1.0)中,重置密码会自动确认用户帐户而不发送确认。更多http://blog.plataformatec.com.br/2013/08/devise-3-1-now-with-more-secure-defaults/