验证具有唯一性和索引

时间:2016-06-21 22:19:13

标签: ruby-on-rails ruby-on-rails-4

我知道,与添加" uniqueness"相比,通过创建索引进行验证是万无一失的。模型的关键字。

同时具有索引和"唯一性"是否有价值。或者这是个坏主意?

user.rb:

validates :email, uniqueness: true

schema.rb

add_index "users", ["email"], name: "index_users_on_email", unique: true

1 个答案:

答案 0 :(得分:2)

是的,两种方法都有一个值,您想要同时使用这两种方法。验证和索引也有不同的用途。

通过向数据库添加索引,首先提高性能,然后确保在非常低的级别(即使有人试图强制复制),您保证拥有唯一数据。它不会退出验证唯一性。如果您尝试插入副本,您的应用将抛出异常。

在验证中添加唯一性意味着如果要保存/更新无效的内容,Rails将捕获并显示错误消息(无异常)。您可以通过使用validate: false参数保存来跳过Rails验证,但是您永远无法避免数据库级别的唯一性。