繁体   English   中英

Rails:验证两列的唯一性(一起)

[英]Rails: validate uniqueness of two columns (together)

我有一个带有mediumcountry列(等等)的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] }

它使用mediumanother_medium值验证所有行中country唯一性。

注意:不要忘记在上面的列上添加索引,这可以确保快速检索并为唯一记录添加数据库级别的验证。

更新:用于在创建表时添加索引

t.index [:medium, :another_medium], unique: true

您可以像这样将:scope参数传递给验证器:

validates_uniqueness_of :medium, scope: :country

有关更多示例,请参阅文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM