我正在尝试使用rake db:seed预先加载所有设备帐户。所有其他模型的数据似乎都插入到数据库中,但由于某种原因,没有为使用设计的Person模型创建行。从Web界面注册工作正常,但我想避免手动创建帐户,这就是我使用rake db:seed的原因。我从通过Web界面创建的帐户中复制了encrypted_password,password_salt。请让我知道如何解决这个问题?非常感谢..
people = Person.create(
:email => 'nnn@gmail.com',
:encrypted_password => '$2a$10$SyacAOhJQtVeTcTPYm.ROuFbhGMylfj4fLrK3NHyeRwfEokKp2NVW',
:password_salt => '$2a$10$SyacAOhJQtVeTcTPYm.ROu',
:first_name => "nnn",
:last_name => "yyy"
)
in routes.rb i have.
devise_for :people
答案 0 :(得分:24)
我过去使用Devise做过这个。我没有尝试设置加密密码和盐。我只是设置密码和确认这样的东西(我没有我的项目方便):
Person.create(:email => 'nnn@gmail.com', :password => 'foobar', :password_confirmation => 'foobar', :first_name => 'nn', :last_name => 'yy')
试试。
答案 1 :(得分:4)
很可能“create”方法由于模型验证而悄然失败,因此返回false。如果您使用“创建!”,您将会出错。而是( with exclamation ) - 如果验证失败,此方法会引发异常。
在您的情况下验证失败的可能原因是(默认为Devise )最小密码长度为6个字符,而您根本没有提供密码。
答案 2 :(得分:0)
如果您在多次运行rake db:seed时不想要重复:
User.create(
email: email,
password: password,
password_confirmation: password
) unless User.where(email: email).exists?