验证 Rails 中两个属性的数字唯一性

Validating numeric uniqueness of two attributes in Rails

我有一个模型 Track,它有两个属性:

disc 表示曲目所属的光盘,number 表示曲目在专辑中的数字顺序。

我想验证曲目编号的唯一性,使每张光盘只能有一个唯一的曲目编号。因此,例如在光盘 1(或光盘 2)上,只能有一个曲目 number 为 1。

在 Rails' 中一个属性依赖于另一个属性的唯一性验证中是否有预先存在的方法来执行此操作?如果不是,编写自定义验证的最佳方式是什么?

您可以尝试 validates_uniqueness_ofscope:

validates_uniqueness_of :number, scope: [:disc, album_id]

顺便说一句,在数据库级别,您还应该使用 unique index:

对其进行验证
add_index :table_name , [:number, :disc, :album_id], unique: true

或使用 gem 提供复合主键功能。