Ruby on rails 为什么唯一记录的唯一性验证会失败?

Ruby on rails 为什么唯一记录的唯一性验证会失败?,ruby-on-rails,Ruby On Rails,我正在用初始数据填充Rails 3.2应用程序。我有一个国家和一个州的模式。在我的状态模型中 validates :country_id, presence: true validates :name, presence: true, uniqueness: { scope: :country_id } 当我尝试创建一个状态时 State Exists (0.9ms) SELECT 1 FROM "states" WHERE ("stat

我正在用初始数据填充Rails 3.2应用程序。我有一个国家和一个州的模式。在我的状态模型中

  validates :country_id,
    presence: true

  validates :name,
    presence: true,
    uniqueness: {
      scope: :country_id
    }
当我尝试创建一个状态时

State Exists (0.9ms)  SELECT 1 FROM "states" WHERE ("states"."name" = 'my-test-state' AND "states"."country_id" = 220) LIMIT 1
  Country Load (0.6ms)  SELECT "countries".* FROM "countries" WHERE "countries"."id" = 220 LIMIT 1
   (0.6ms)  ROLLBACK
问题是,在状态模型中只有4条记录,没有一条与我试图创建的onle完全相同。这绝对是一个独一无二的记录

为什么验证会失败?我在两列上验证的语法正确吗?(姓名+国家/地区识别号)


谢谢

您确定DB级别的约束是正确的吗?在我看来,您所做的一切都很好……对Rails来说,db端的约束是什么并不重要。它进行选择,如果它发现任何违反唯一性约束的记录,则该记录无效。您确定它是无效的,因为您认为它是无效的吗?如果在控制台中创建一个新的唯一无效对象并键入
object.valid?&&object.errors
?感谢大家的想法。您是正确的,不是此验证导致记录无法保存,而是其他地方的另一个问题。我把日志中的“State Exists”头误认为是一个警告,但它只是一个正在运行验证的注释。经过一番挖掘,一切都运转起来了。谢谢你确定你在数据库级别的限制是正确的吗?在我看来,您所做的一切都很好……对Rails来说,db端的约束是什么并不重要。它进行选择,如果它发现任何违反唯一性约束的记录,则该记录无效。您确定它是无效的,因为您认为它是无效的吗?如果在控制台中创建一个新的唯一无效对象并键入
object.valid?&&object.errors
?感谢大家的想法。您是正确的,不是此验证导致记录无法保存,而是其他地方的另一个问题。我把日志中的“State Exists”头误认为是一个警告,但它只是一个正在运行验证的注释。经过一番挖掘,一切都运转起来了。谢谢