我有一个Rails应用程序(Postgres),我想添加基于多个参数的验证。
如果
Object.column1 & Object.column2 are NOT unique => reject new entry.
但如果
Object.column1 IS not unique BUT Object.column2 for duplicate entry is different => accept new entry
最好的方法是什么?
您可以向唯一性约束添加范围。然后,它将仅检查整组列是否唯一。
validates_uniqueness_of :column1, :scope => :column2
有关详细信息,请参阅文档。
不太确定 :scope 是否会解决您的问题,或者您可以编写自己的验证,例如
validate :custom_validation
def custom_validation
self.errors.add(:column, MESSAGE) if YOUR VALIDATION LOGIC fails
end
我认为是
class User
validates :first_name, :uniqueness => true, :scope => [:last_name]
end
您还可以创建唯一索引,您的数据库将强制执行唯一性。
add_index :users, [:last_name, :first_name], :unique => true
通过使用迁移将唯一索引添加到 [column1, column2] 和 [column2] 在数据库级别执行此检查可能更安全,如下所示:
add_index :model_name, [:column1, :column2], :unique=>true
add_index :model_name, :column2, :unique=>true