Ruby on rails 3 Rails 3.1.1具有“安全”密码摘要can';不要空白

Ruby on rails 3 Rails 3.1.1具有“安全”密码摘要can';不要空白,ruby-on-rails-3,Ruby On Rails 3,我一直在玩弄has_secure_密码,我遇到了一个问题。我在UsersController中对创建操作的测试无效。所以我开始在控制台中玩,意识到密码没有被转换成has并保存在password_digest字段中 当我尝试从控制台创建用户时,会发生以下情况 irb(main):031:0> u = User.new(:email => "test1@test.com", :password => "test", :password_confirmation => "tes

我一直在玩弄has_secure_密码,我遇到了一个问题。我在UsersController中对创建操作的测试无效。所以我开始在控制台中玩,意识到密码没有被转换成has并保存在password_digest字段中

当我尝试从控制台创建用户时,会发生以下情况

irb(main):031:0> u = User.new(:email => "test1@test.com", :password => "test", :password_confirmation => "test")
=> #<User id: nil, email: "test1@test.com", password_digest: nil, created_at: nil, updated_at: nil>
irb(main):032:0> u.save
=> false
irb(main):033:0> u.errors
=> #<ActiveModel::Errors:0x00000100cde500 @base=#<User id: nil, email: "test1@test.com", password_digest: nil, created_at: nil, updated_at: nil>, @messages={:password_digest=>["can't be blank"]}>
irb(main):031:0>u=User.new(:email=>)test1@test.com“,:password=>“test”,:password\u confirmation=>“test”)
=> #
irb(主):032:0>u.save
=>错误
irb(主):033:0>u.错误
=>#[“不能为空”]>
我不确定我做错了什么。似乎从未分配密码摘要属性。如果我创建一个没有属性的用户对象,并分别分配每个属性,我会得到相同的错误

这是我的模型

class User < ActiveRecord::Base
  has_secure_password
  attr_accessible :email, :password, :password_confirmation
end
class用户
提前谢谢你的帮助


亚历克斯·谢诺伊(Alex Shenoy)

我举了一个简单的例子,并按预期工作。也许你的配置中有什么东西把它弄乱了。我的简单测试:

$ rails new test
$ cd test
$ rails g model user name:string password_digest:string
$ rake db:migrate
$ vim app/model/user.rb

保存并退出

$ rails c

Loading development environment (Rails 3.1.1)
ruby-1.9.2-p290 :001 > u = User.new(:name => "test1@test.com", :password => "test", :password_confirmation => "test")
=> #<User id: nil, name: "test1@test.com", password_digest: "$2a$10$08xY7p.8hq1.95ZQsx63ku05YfvVqSQ/CLiqUW5dtGhZ...", created_at: nil, updated_at: nil>
ruby-1.9.2-p290 :002 > u.save
Binary data inserted for `string` type on column `password_digest`
  SQL (51.4ms)  INSERT INTO "users" ("created_at", "name", "password_digest", "updated_at") VALUES (?, ?, ?, ?)  [["created_at", Sun, 23 Oct 2011 13:38:49 UTC +00:00], ["name", "test1@test.com"], ["password_digest", "$2a$10$08xY7p.8hq1.95ZQsx63ku05YfvVqSQ/CLiqUW5dtGhZSP9S7FtUy"], ["updated_at", Sun, 23 Oct 2011 13:38:49 UTC +00:00]]
=> true
$rails c
加载开发环境(Rails 3.1.1)
ruby-1.9.2-p290:001>u=User.new(:name=>)test1@test.com“,:password=>“test”,:password\u confirmation=>“test”)
=> #
ruby-1.9.2-p290:002>u.save
为“密码摘要”列上的“字符串”类型插入的二进制数据`
SQL(51.4ms)插入“用户”(“创建时间”、“名称”、“密码摘要”、“更新时间”)值(?、、、、?)[[“创建时间”,Sun,2011年10月23日13:38:49 UTC+00:00],“名称”test1@test.com“],[“密码摘要”,“$2a$10$08xY7p.8hq1.95ZQsx63ku05YfvVqSQ/CLiqUW5dtGhZSP9S7FtUy”],[“更新时间”,太阳,2011年10月23日13:38:49 UTC+00:00]]
=>正确

我也有同样的症状,密码摘要不能为空。我遇到的问题是,我在user.rb中设置了:

  attr_accessor :password
这会阻止调用方法password=(请参阅secure_password.rb)

因此,密码摘要的值从未设置过


对我来说,修复方法是删除attr_访问器行。

我遇到了一个非常类似的问题。我的将保存用户,但
密码摘要
始终为
nil
。对我来说,这是因为我的模型中有以下代码顺序:

attr_accessible :name, :password, :password_confirmation
has_secure_password
我把它改成:

has_secure_password
attr_accessible :name, :password, :password_confirmation
现在它工作得很好

attr_accessible :name, :password, :password_confirmation
has_secure_password
has_secure_password
attr_accessible :name, :password, :password_confirmation