0

我有一个 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  

最好的方法是什么?

4

4 回答 4

0

不太确定 :scope 是否会解决您的问题,或者您可以编写自己的验证,例如

validate :custom_validation

def custom_validation
  self.errors.add(:column, MESSAGE) if YOUR VALIDATION LOGIC fails
end
于 2012-05-01T18:53:37.653 回答
0

您可以将范围添加到唯一性约束。然后它将仅检查整个列集是否唯一。

validates_uniqueness_of :column1, :scope => :column2

请参阅文档以获取更多信息。

于 2012-05-01T18:58:35.713 回答
0

我想这是

class User
  validates :first_name, :uniqueness => true, :scope => [:last_name]
end

您还可以创建唯一索引,您的数据库将强制执行唯一性。

add_index :users, [:last_name, :first_name], :unique => true
于 2012-05-01T18:58:56.243 回答
0

通过使用迁移向 [column1, column2] 和 [column2] 添加唯一索引,在数据库级别执行此检查可能更安全,如下所示:

add_index :model_name, [:column1, :column2], :unique=>true
add_index :model_name, :column2, :unique=>true
于 2012-05-01T19:00:44.993 回答