从数据库加载的Active Record对象无效

时间:2013-01-22 14:39:24

标签: ruby-on-rails rails-activerecord

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

当我在此对象上调用valid?时,由于未满足rails唯一约束,它返回false,至少验证说明了这一点。

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

这里发生了什么,这首先是如何实现的?

2 个答案:

答案 0 :(得分:0)

您应该检查 @ object.errors.inspect 以检查发生了什么,然后相应地进行修复。

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

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

Ruby应该告诉你在尝试保存对象时出了什么问题。

答案 1 :(得分:0)

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

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

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