2016-07-08 43 views
2

我遇到了Devise Gem的麻烦,我使用默认的可恢复方法,链接正在发送。复位值(reset_password_sent_at)被保存在数据库中,但是当我要记下新密码,并更新它,给这个错误当我想恢复密码时,Rails设计Gem(未定义方法`to_datetime'为nil:NilClass)

NoMethodError (undefined method `to_datetime' for nil:NilClass): 
    activesupport (4.0.2) lib/active_support/core_ext/date_time/calculations.rb:161:in `<=>' 
    activesupport (4.0.2) lib/active_support/core_ext/time/calculations.rb:286:in `compare_with_coercion' 
    activesupport (4.0.2) lib/active_support/time_with_zone.rb:214:in `<=>' 
    activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:97:in `==' 
    activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:97:in `!=' 
    activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:97:in `_field_changed?' 
    activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:66:in `write_attribute' 
    activerecord (4.0.2) lib/active_record/attribute_methods/time_zone_conversion.rb:39:in `reset_password_sent_at=' 
    devise (3.5.6) lib/devise/models/recoverable.rb:94:in `clear_reset_password_token' 
    devise (3.5.6) lib/devise/models/recoverable.rb:32:in `block (2 levels) in <module:Recoverable>' 
    activesupport (4.0.2) lib/active_support/callbacks.rb:377:in `_run__1626105923374900797__update__callbacks' 
    activesupport (4.0.2) lib/active_support/callbacks.rb:80:in `run_callbacks' 
    activerecord (4.0.2) lib/active_record/callbacks.rb:310:in `update_record' 
    activerecord (4.0.2) lib/active_record/timestamp.rb:70:in `update_record' 
    activerecord (4.0.2) lib/active_record/persistence.rb:477:in `create_or_update' 
    activerecord (4.0.2) lib/active_record/callbacks.rb:302:in `block in create_or_update' 
    activesupport (4.0.2) lib/active_support/callbacks.rb:393:in `_run__1626105923374900797__save__callbacks' 
    activesupport (4.0.2) lib/active_support/callbacks.rb:80:in `run_callbacks' 
    activerecord (4.0.2) lib/active_record/callbacks.rb:302:in `create_or_update' 
    activerecord (4.0.2) lib/active_record/persistence.rb:106:in `save' 
    activerecord (4.0.2) lib/active_record/validations.rb:51:in `save' 
    activerecord (4.0.2) lib/active_record/attribute_methods/dirty.rb:32:in `save' 
    activerecord (4.0.2) lib/active_record/transactions.rb:270:in `block (2 levels) in save' 
    activerecord (4.0.2) lib/active_record/transactions.rb:326:in `block in with_transaction_returning_status' 
    activerecord (4.0.2) lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `block in transaction' 
    activerecord (4.0.2) lib/active_record/connection_adapters/abstract/database_statements.rb:210:in `within_new_transaction' 
    activerecord (4.0.2) lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `transaction' 
    activerecord (4.0.2) lib/active_record/transactions.rb:209:in `transaction' 
    activerecord (4.0.2) lib/active_record/transactions.rb:323:in `with_transaction_returning_status' 
    activerecord (4.0.2) lib/active_record/transactions.rb:270:in `block in save' 
    activerecord (4.0.2) lib/active_record/transactions.rb:281:in `rollback_active_record_state!' 
    activerecord (4.0.2) lib/active_record/transactions.rb:269:in `save' 
    devise (3.5.6) lib/devise/models/recoverable.rb:48:in `reset_password' 
    devise (3.5.6) lib/devise/models/recoverable.rb:141:in `reset_password_by_token' 
    devise (3.5.6) app/controllers/devise/passwords_controller.rb:32:in `update' 

调试这个它似乎与reset_password_sent_at是零,当一个问题密码重置(lib/devise/models/recoverable.rb:94:inclear_reset_password_token)

我试图将本地时间更改为UTC存储,但问题不是这样。任何建议?

+0

设计当您使用默认的设计方法比你没有改变色器件现有的代码。 – Vishal

+0

如果您使用gem“letter_opener”而不是密码重置电子邮件将不会实际发送 – Vishal

+0

我没有使用letter_opener。邮件正在发送。 此外,我使用的默认方法,所以我不覆盖或更改设计的代码 –

回答

2

我的解决方案是将我的导轨从4.0.2升级到4.2.7。当我运行软件包安装并更新gemfile依赖现在正在工作。

升级从(3.5.6)到(4.2.0)

相关问题