我在我的模型中添加了类似这样的验证:
validates :name, uniqueness: {scope: user_id}
在我的迁移中添加了类似这样的add_index:
add_index(:posts, :name)
但我刚刚在rails api page上阅读了关于数据完整性的部分。
我想知道我的模型是否会出现任何完整性错误,所以我的问题是:我应该将索引重写为吗?
add_index(:posts,[:name,:user_id]),unique:true
全心全意,
答案 0 :(得分:3)
您正在谈论的数据完整性可以在您可能已经知道的2个级别强制执行:在应用程序级别和数据库级别。
在应用程序级别:您添加的验证。 在数据库级别:您建议的索引
您已经设置了第一个。因此,只要所有内容都通过您的Rails模型保存在db中,您将不会遇到任何数据库完整性问题。
但是,如果其他第三方应用程序可能会写入您的数据库,那么在数据库级别强制执行唯一性也不是一个坏主意。
即使第一个足够,建立第二个也不是一个坏主意。
此外,如果您经常查询与user_id相关联的名称,实际上最好使用add_index(:posts, [:name, :user_id])
,从而加快查询速度。
答案 1 :(得分:1)