在没有唯一性约束的字段上会导致ActiveRecord :: RecordInvalid的原因是什么?

时间:2016-12-27 22:20:04

标签: ruby-on-rails ruby activerecord unique

我有一个copy方法复制一个对象,然后更改它的一些属性。保存时,它会在ActiveRecord::RecordInvalid上出现Name错误。但是,name属性没有唯一性约束,因此不应该失败。

此外,名称HAS已被更改,因此它是唯一的,并且调试方法表明情况就是这样。如何在没有唯一性约束的字段上获取此错误,并且IS是唯一的?

我已经看到了一些与RSpec有关的问题,但这不是在测试环境中,因此它不是数据库问题。

我意识到我没有发布代码 - 我正在寻找可能导致类似内容的一般答案。

1 个答案:

答案 0 :(得分:0)

如果您可以显示您的代码以及Rails版本,那么查明实际问题会容易得多。但是,如果您正在寻找一般性答案,一般的答案是RecordInvalid是由爆炸方法引发的,主要是save!validate!以及其他方法,如create!那样调用这两个方法},update!。验证失败时,这些方法会引发此异常。并且验证可能会因数百万个原因而失败,这些原因取决于您的验证设置。

当在无效的关联记录上调用这些方法时,也会引发此异常。

我还认为,当您定义自己的验证并返回false时,验证可能会失败。