Rails几个(聚合)列的唯一性?

时间:2012-05-01 18:06:33

标签: ruby-on-rails database validation uniqueidentifier

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

答案 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