播种数据库时“密码不能为空”错误

时间:2015-01-13 20:40:31

标签: ruby-on-rails validation ruby-on-rails-4 devise seeding

我尝试使用我使用seed_dump gem获取的数据来种子数据库,found here.无论如何,生成的种子文件看起来是合法的,但它似乎与用户模型验证:

  

ActiveRecord :: RecordInvalid:验证失败:密码不能为空

要想一想种子看起来像这样:

User.create!([
  {email: "1234@localhost", encrypted_password: "$2a$10$5eoHh6M2q4GjGkHClO.NqebWWhS94D8rNj5Ot6CB2qrbn7IrTfkSa", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2014-12-31 22:27:09", last_sign_in_at: "2014-12-31 22:27:09", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false}
])

另外,我使用devise gem进行用户管理。

在给定此过滤器的情况下,是否有一种优雅的方式来播种用户数据?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

u = User.new([
  {email: "1234@localhost", encrypted_password: "$2a$10$5eoHh6M2q4GjGkHClO.NqebWWhS94D8rNj5Ot6CB2qrbn7IrTfkSa", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2014-12-31 22:27:09", last_sign_in_at: "2014-12-31 22:27:09", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false}
])
u.save!(validate: false)

答案 1 :(得分:1)

有同样的问题。 User.new解决方案为我工作。

以下解决方案确实有效,来自“在设计中播种用户”的类似问题: Seeding users with Devise in Ruby on Rails

简而言之, encrypted_pa​​ssword 替换为密码 以及您习惯使用的纯文本密码。< / p>

示例:

User.create!([
  {email: "1234@localhost", password: "some_password", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2014-12-31 22:27:09", last_sign_in_at: "2014-12-31 22:27:09", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false}
])

然后您可以运行rake db:seed。 Rails将为每个用户发挥其魔力(通过自动创建 encrypted_pa​​ssword 哈希),您将能够正常登录。