[英]Rails: validate uniqueness of two columns (together)
我有一个带有medium
和country
列(等等)的Release
模型。 不应该有releases
共享相同的medium
/ country
组合。
我将如何将其编写为 Rails 验证?
您可以将唯一性验证与scope
选项一起使用。
此外,您应该向数据库添加唯一索引,以防止新记录在写入之前同时检查时通过验证:
class AddUniqueIndexToReleases < ActiveRecord::Migration
def change
add_index :releases, [:country, :medium], unique: true
end
end
class Release < ActiveRecord::Base
validates :country, uniqueness: { scope: :medium }
end
以上所有答案都缺少如何验证模型中多个属性的唯一性。 下面的代码旨在说明如何在一个范围内使用多个属性。
validates :country, uniqueness: { scope: [:medium, :another_medium] }
它使用medium
和another_medium
值验证所有行中country
唯一性。
注意:不要忘记在上面的列上添加索引,这可以确保快速检索并为唯一记录添加数据库级别的验证。
更新:用于在创建表时添加索引
t.index [:medium, :another_medium], unique: true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.