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

我正在尝试使用我在这里找到的seed_dump gem抓取的数据来播种我的数据库。 无论如何,生成的种子文件看起来合法,但它似乎与用户模型validation相悖:

ActiveRecord :: RecordInvalid:validation失败:密码不能为空

为了给出一个想法,种子看起来像这样:

 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} ]) 

此外,我正在使用devisegem进行用户管理。

在给定此filter的情况下是否有一种优雅的方式来播种用户数据

你可以做:

 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) 

有同样的问题。 User.new解决方案对我不起作用。

以下解决方案确实起作用,来自“在设计中播种用户 ”的类似问题: 在Ruby on Rails中使用Devise为用户播种

简而言之,使用您熟悉的密码纯文本密码替换 encrypted_pa​​ssword

例:

 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哈希),您将能够正常登录。