Я пытаюсь использовать has_secure_password в моей модели пользователя, но обнаружил, что, пока он работает в приложении, он прерывает все мои тесты. У меня есть простая модель пользователя:Создание пользователей с has_secure_password
class User < ActiveRecord::Base
has_secure_password
attr_accessible :email
validates :email, :presence => true,
:format => { :with => /\A[\w+\-.][email protected][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 protected]",
: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_digest
, поэтому его прямое обращение генерирует нужные мне поля. Есть ли способ использовать User.create, но все же вызывать этот метод?
'attr_accessible: электронная почта,: пароль: password_confirmation' –
Как вы это в Rails 4? Я спрашиваю, потому что в Rails 4 больше нет attr_accessible. –
Вместо этого вы должны использовать 'attr_accessor'. –