我如何从SQL返回错误消息,并在我的rails应用程序中使用这些错误消息?



我知道unique: true在Ruby on Rails迁移中使列唯一

add_index :table_name, :column_name, unique: true

我还知道validates :username, uniqueness: true也使列唯一。

我只想用add_index :table_name, :column_name, unique: true来使我的列唯一。

如果我只使用add_index :table_name, :column_name, unique: true没有验证在任何模型中,我怎么能从SQL返回错误消息,并在我的rails应用程序中使用这些错误消息?


假设电子邮件字段是唯一的。为了使它独特,我只使用add_index :table_name, :column_name, unique: true

User.create(name: "John", email: "john@gmail.com")
User.create(name: "Sofia", email: "john@gmail.com")    # it should returns an error

我怎么能得到这个错误信息,并在我的rails应用程序中使用它?

要在Rails中正确地完成uniqueness,您需要在模型和数据库中的索引中进行验证。

只要添加validates :name, uniqueness: true,你就会没事的。

仍然可能有一些罕见的情况下,当你得到SQL错误消息,而不是ActiveRecord错误,因为竞争条件。

更多信息:https://guides.rubyonrails.org/active_record_validations.html#uniqueness

如果你需要挽救由SQL引发的重复错误,你可以使用activerecord-rescue_from_duplicate gem。使用这个gem允许是否使用rails验证。

但是一般来说,在你的模型中添加唯一性验证并不能保证唯一性,除非你添加一个唯一的数据库索引看看这篇文章。

最新更新