0

我有一个从数据库加载的 ActiveRecord 对象。

当我调用valid?这个对象时,它会false由于未满足 rails 唯一约束而返回,至少验证是这样说的。

我检查了数据库架构,并且唯一字段也定义了一个索引,因此在数据库级别上也确保了唯一性。

这里发生了什么,这怎么可能首先发生?

4

2 回答 2

0

如果您没有在数据库表上定义唯一索引,就会发生这种情况!

更详细一点:我认为数据库在列上有一个唯一索引,但结果证明这是一个“常规”索引。问题出现了,因为在应用程序的某个时刻,模型在没有先验证的情况下被保存。这导致数据库中的非唯一条目。通过调用valid?触发检查唯一性的 rails 内部例程(然而这是实现的),它正确地返回了假。

经验教训:始终确保在数据库级别添加唯一索引。

于 2013-01-22T21:59:04.547 回答
0

您应该检查@object.errors.inspect以检查正在发生的事情,然后进行相应的修复。

同样重要的是,您何时检查对象的有效性,即在保存之前或之后。

更优雅的方法是使用@object.save!

Ruby 应该告诉您在尝试保存对象期间出了什么问题。

于 2013-01-22T14:44:11.737 回答