我正在尝试在我的用户模型上使用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但是仍然可以调用这个方法吗?
答案 0 :(得分:1)
原来问题很简单。由于我没有在attr_accessible
添加:密码,因此当我拨打User.create
或User.new
时,我没有填写该字段。我需要对代码进行的唯一修改是
attr_accessible :email, :password