【发布时间】:2015-05-01 10:13:31
【问题描述】:
我已在现有应用中安装了 Devise,并且需要为数据库设置 100 个用户。他们现在有了 Devise 添加的字段,例如电子邮件和 encrypted_password 等。我正在尝试的种子文件部分是这样的: (种子.rb...)
users = [] # Empty array to store users
100.times do
username = "#{Faker::Vehicle.make}#{Faker::BaconIpsum.word}-#{rand(999)}"
user_password = SecureRandom.base64(12)
u = User.new
u.id = SecureRandom.random_number(9999999999)
u.username = username.gsub(/\s+/,"")
u.password = user_password
u.password_confirmation = user_password
u.email = "#{Faker::Internet.free_email}"
u.sign_in_count = 0
u.save
users << u # Put newly created user in the array
end
只是用 NOT NULL 字段播种。当我尝试播种时,我收到以下错误:
ActiveRecord::StatementInvalid: Mysql2::Error: 字段 'password' 没有默认值: INSERT INTO
users(encrypted_password,id,username) VALUES (' colton@gmail.com', '$2a$10$F9RR6h3R48ySJ3./lrPgfeqE84MgPJh7TVseXL.ngwU1Xp5hYxPDC', 3494734525, 'Mitsubhibrisket-872')
编辑:用户表的 schema.rb,由迁移生成...
create_table "users", force: true do |t|
t.string "username", limit: 30, null: false
t.string "password", limit: 30, null: false
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
end
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
add_index "users", ["username", "id"], name: "BY_USERNAME", using: :btree
显然,我在这里传递了“密码”的值。在 SO 等其他帖子之后,我学会了发送“密码”和“密码确认”,而不是尝试发送“加密密码”。仍然得到同样的错误。为什么这不起作用? 我应该在我的seeds.rb 文件中要求“设计”吗? 阅读错误,似乎我应该更改“密码”字段以允许 NULL 并只存储“加密”密码。
请帮忙,谢谢!
【问题讨论】:
-
“users”表的 schema.rb 是什么样子的?
-
@dgilperez 更新了我的帖子以显示用户表的 schema.rb
标签: mysql authentication ruby-on-rails-4 devise seeding