修改 真是愚蠢的错误:
db:reset seed the database。
我正在尝试播放数据库并创建有帖子的用户,但用户仍然违反唯一性约束......即使只有其中一个。
目前,我没有模型验证。
标准用户设计架构:
create_table "users", force: :cascade do |t|
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"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "username"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
分贝/ seeds.rb
1.times do |n|
email = Faker::Internet.email
username = Faker::Name.name
password = 'password'
password_confirmation = 'password'
reset_password_token = nil
id = n
User.create!(
email: email,
username: username,
password: password,
password_confirmation: password_confirmation,
reset_password_token: reset_password_token,
id: id
)
end
我运行了以下内容:
rails c
rake db:reset
rake db:migrate
rake db:seed
>> ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: UNIQUE constraint failed: users.id: INSERT INTO "users"
我只生成了一个用户但违反了唯一性。堆栈跟踪告诉我这是一个创建方法的问题,但我不知道如何解决这个问题。
我只有两个可能在数据库级别需要唯一的东西,那就是index_users_on_email和index_users_on_reset_password,如果数据库已被重置并仅用一个记录播种,则这两者都是唯一的。
我哪里错了?
答案 0 :(得分:0)
以下是我为用户创建种子的方式,希望它有所帮助。
1.times do
user = User.new(
name: Faker::Name.name,
email: Faker::Internet.email,
password: Faker::Lorem.characters(10)
)
user.skip_confirmation!
user.save!
end
users = User.all