我有一个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
最好的方法是什么?
答案 0 :(得分:0)
不确定是否:范围将解决您的问题,或者您可以编写自己的验证,如
validate :custom_validation
def custom_validation
self.errors.add(:column, MESSAGE) if YOUR VALIDATION LOGIC fails
end
答案 1 :(得分:0)
您可以将范围添加到唯一性约束中。然后它只会检查整个列是否唯一。
validates_uniqueness_of :column1, :scope => :column2
有关详细信息,请参阅the documentation。
答案 2 :(得分:0)
我认为是
class User
validates :first_name, :uniqueness => true, :scope => [:last_name]
end
您还可以创建唯一索引,数据库将强制实施唯一性。
add_index :users, [:last_name, :first_name], :unique => true
答案 3 :(得分:0)
通过使用迁移向[column1,column2]和[column2]添加唯一索引,在数据库级别执行此检查可能更安全,如下所示:
add_index :model_name, [:column1, :column2], :unique=>true
add_index :model_name, :column2, :unique=>true