保存到数据库时Rails nil值

时间:2013-06-20 22:04:26

标签: ruby-on-rails-3 authentication

我正在尝试在rails中实现用户身份验证系统,这是我的模型:

class User < ActiveRecord::Base 
  attr_accessible :id, :email, :name, :password, :created_at, :updated_at
  has_secure_password

  before_save { email.downcase! }

  validates :email, presence: true, :uniqueness => { :case_senstive => false }

  validates :name, presence: true

  validates :password, presence: true, length: { minimum: 6 }
end

在控制台中运行我可以成功读取User表,然后当我尝试创建记录时:

User.new(:name => "A", :email => "a@a.a", :password => "password")

在其上运行valid会重新发送true,但在保存记录时,我会收到错误:

users.password may not be NULL

password中提取hash可以正常工作。

有什么问题?

由于

2 个答案:

答案 0 :(得分:0)

你在哪里设置:password_confirmation?文档中的示例表明您需要它。

http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html

答案 1 :(得分:0)

主要问题在has_secure_password。如果您正在使用它,则应该有字符串字段:password_digest(这是您保存加密密码的位置)。您还需要删除字段:password和您的存在验证器。添加gem 'bcrypt-ruby', '~> 3.0.0'后。 现在这应该工作

user = User.new(:name => "A", :email => "a@a.a", 
                :password => "password", :password_confirmation => "password")

但最好使用伟大的宝石https://github.com/plataformatec/devise。它拥有您需要的一切。

新添加

attr_accessible也应:password_confirmation,并且该字段应在您的表单中使用。

more info about has_secure_password