使用has_secure_password创建用户

时间:2012-01-06 10:10:08

标签: ruby-on-rails ruby-on-rails-3 rspec

我正在尝试在我的用户模型上使用has_secure_password,但是发现虽然它在应用程序中有效,但它会破坏我的所有测试。我有一个简单的用户模型:

class User < ActiveRecord::Base
    has_secure_password
    attr_accessible :email

    validates :email, :presence => true,
              :format => { :with => /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i },
              :uniqueness => { :case_sensitive => false }
    validates :password, :presence => true
end

我的第一个测试(rspec)只是确认我可以创建一个具有有效属性的新用户:

describe User do
    before(:each) do
        @attr = { :forename => "Captain",
                  :surname => "Hook",
                  :email => "email@test.com",
                  :password => "password",
                  :password_confirmation => "password" }
    end

    it "should create a new instance given valid attributes" do
        User.create!(@attr)
    end
end

这不起作用,但是当我这样做时

user = User.new(@attr);
user.password = "password";
user.save

它工作正常。我相信这是因为has_secure_password添加了一个新方法password,它处理password_digest的生成,因此直接调用它会生成我需要的字段。有什么方法可以使用User.create但是仍然可以调用这个方法吗?

1 个答案:

答案 0 :(得分:1)

原来问题很简单。由于我没有在attr_accessible添加:密码,因此当我拨打User.createUser.new时,我没有填写该字段。我需要对代码进行的唯一修改是

attr_accessible :email, :password