Ruby ActiveSupport::问题,您的安全密码没有更新某些列吗

Ruby ActiveSupport::问题,您的安全密码没有更新某些列吗,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby,Ruby On Rails 3,Ruby On Rails 4,我的客户型号有一个可恢复的模块。使用has_安全方法进行身份验证的客户模型。以下是客户模型: 我的问题是重置密码后称为重置密码令牌,重置密码发送的密码不为空。它没有设置为null。更新查询未设置在列下面。为什么?我错过什么了吗?如果你需要更多信息,请告诉我 我的环境:我正在使用Rails 4应用程序 更新1 当我放入self.inspect时,我得到以下输出: #<Customer id: 79, email: "milk@yahoo.com", password_digest: "$2a

我的客户型号有一个可恢复的模块。使用has_安全方法进行身份验证的客户模型。以下是客户模型:

我的问题是重置密码后称为重置密码令牌,重置密码发送的密码不为空。它没有设置为null。更新查询未设置在列下面。为什么?我错过什么了吗?如果你需要更多信息,请告诉我

我的环境:我正在使用Rails 4应用程序

更新1 当我放入self.inspect时,我得到以下输出:

#<Customer id: 79, email: "milk@yahoo.com", password_digest: "$2a$10$U2knjpm5LF1V/sgXag0DcOpgZWHSpLw8nfCy4U8D57s6...", created_at: "2013-05-11 11:55:34", updated_at: "2013-05-16 10:04:45", reset_password_sent_at: nil, reset_password_token: nil>
更新2:


你能检查一下你的模型是否真的有效吗? 我是说

if valid? 
  puts "valid"
  self.reset_password_token = nil
  self.reset_password_sent_at = nil
else
  puts self.errors.inspect
end

也许您忘记了一些验证,您不会去那个块?

好的,所以最后,如果您的模型在清除变量后无效,您可以这样做:

save(validate: false)

它将跳过验证,并允许您保存无效模型

谢谢您的回复。是的,我查过了。我的数据是有效的。是错误吗?也许你可以尝试代替self.reset\u password\u token=nil self.update\u列:reset\u password\u token,nil和self.update\u列:reset\u password\u sent\u atm nil我尝试过了,但没有运气。我也使用write_属性,但不使用luck tooo:在进行puts self.inspect时显示什么?属性改变了吗?它必须工作;您可以组合放置self.errors.inspect放置self.save并再次放置self.errors.inspect吗?也许有一个为你设置变量的保存回调?
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"PbUhgSPvQZWXflT5fA1WhqhHJX3c7NMapg6eeDQvpBI=", "token"=>"fiMXi2_4cYCHsFMop9TJBL2Qeqc41xWhHA", "q"=>{"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
Unpermitted parameters: utf8, _method, authenticity_token, q
  Customer Load (0.4ms)  SELECT "customers".* FROM "customers" WHERE "customers"."reset_password_token" IS NULL LIMIT 1
Unpermitted parameters: password_confirmation
Unpermitted parameters: password
  Customer Exists (0.3ms)  SELECT 1 AS one FROM "customers" WHERE ("customers"."email" = 'milk@yahoo.com' AND "customers"."id" != 79) LIMIT 1
----------------------------BEFORE: 
#<ActiveModel::Errors:0xb593c280 @base=#<Customer id: 79, email: "milk@yahoo.com", password_digest: "$2a$10$/xYeks8yyaCMOFORFLMb1.xR7fxfskW6kHR4S2df/LTK...", store_id: 124, created_at: "2013-05-11 11:55:34", updated_at: "2013-05-16 11:56:52", reset_password_sent_at: nil, reset_password_token: nil>, @messages={}>
   (0.1ms)  BEGIN
  CACHE (0.0ms)  SELECT 1 AS one FROM "customers" WHERE ("customers"."email" = 'milk@yahoo.com' AND "customers"."id" != 79) LIMIT 1
  SQL (0.3ms)  UPDATE "customers" SET "password_digest" = $1, "updated_at" = $2 WHERE "customers"."id" = 79  [["password_digest", "$2a$10$/xYeks8yyaCMOFORFLMb1.xR7fxfskW6kHR4S2df/LTKUI001xu0O"], ["updated_at", Thu, 16 May 2013 19:58:25 ULAT +08:00]]
   (16.5ms)  COMMIT
---------------------------- SAVE: 
true
----------------------------AFTER: 
#<ActiveModel::Errors:0xb593c280 @base=#<Customer id: 79, email: "milk@yahoo.com", password_digest: "$2a$10$/xYeks8yyaCMOFORFLMb1.xR7fxfskW6kHR4S2df/LTK...", store_id: 124, created_at: "2013-05-11 11:55:34", updated_at: "2013-05-16 11:58:25", reset_password_sent_at: nil, reset_password_token: nil>, @messages={}>
if valid? 
  puts "valid"
  self.reset_password_token = nil
  self.reset_password_sent_at = nil
else
  puts self.errors.inspect
end
save(validate: false)