【发布时间】:2015-09-03 19:51:19
【问题描述】:
当我尝试创建新的 Devise 用户时,出现错误:
ActiveRecord::RecordNotUnique: TinyTds::Error: 无法插入重复 具有唯一索引的对象“dbo.admin_users”中的关键行 'index_admin_users_on_reset_password_token'。重复键值 是(空)
这是因为索引 'index_admin_users_on_reset_password_token' 需要 reset_password_token 字段中的唯一值,并且每个创建的用户都在该字段中使用nil 值提交,这意味着第一个之后的每条记录都不会是唯一的。
当我尝试在该字段中手动提交一个值时,它会被自动省略。
user = AdminUser.new(email: "integracore@example.com", password: "integracore", reset_password_token:"french fries", reset_password_sent_at: Time.now)
#<AdminUser:0x000000075303e8
# id: nil,
# email: "integracore@example.com",
# encrypted_password: "$2a$10$cm9AmPuwEey4hDFMUPMMkeD3bLPozT47VLdmg9kDlDRKBXh93Hn0C",
# reset_password_token: "french fries",
# reset_password_sent_at: Thu, 03 Sep 2015 19:42:25 UTC +00:00,
# remember_created_at: nil,
# sign_in_count: 0,
# current_sign_in_at: nil,
# last_sign_in_at: nil,
# current_sign_in_ip: nil,
# last_sign_in_ip: nil,
# created_at: nil,
# updated_at: nil>
user.save
ActiveRecord::RecordNotUnique: TinyTds::Error: 无法插入重复 具有唯一索引的对象“dbo.admin_users”中的关键行 'index_admin_users_on_reset_password_token'。重复键值 是 ().: EXEC sp_executesql N'INSERT INTO [admin_users] ([email], [encrypted_password], [created_at], [updated_at]) 输出插入。[id] 值 (@0, @1, @2, @3)', N'@0 nvarchar(4000), @1 nvarchar(4000), @2 日期时间,@3 日期时间',@0 = N'integracore@example.com',@1 = N'$2a$10$cm9AmPuwEey4hDFMUPMMkeD3bLPozT47VLdmg9kDlDRKBXh93Hn0C', @2 = '09-03-2015 19:45:11.555', @3 = '09-03-2015 19:45:11.555'
我怎样才能克服这个错误并创建一个新用户?
【问题讨论】:
标签: ruby-on-rails ruby sql-server devise