播种数据库时“密码不能为空”错误
我正在尝试使用我在这里找到的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} ])
此外,我正在使用devise
gem进行用户管理。
在给定此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_password 。
例:
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_password哈希),您将能够正常登录。