验证具有范围的列的唯一性

时间:2013-09-04 19:23:26

标签: ruby-on-rails-3.2

我正在处理一个具有状态列(活动或已删除)的模型

现在,我有像这样的唯一性验证

validates :name, :uniqueness => {:scope => :user_id }

我想仅为ACTIVE记录添加另一个“范围”。有点像下面的验证(不起作用)

validates :name, uniqueness: {scope: :user_id }, condition: ['state = ?', 'active']

如果我将在SQL语句中进行验证,它将是“某些”如下所示:

SELECT COUNT(*) FROM table_name WHERE name = '[name]' AND status = 'active'

此问题的一个解决方案是添加默认范围,但在我的情况下,我不需要具有默认范围。

2 个答案:

答案 0 :(得分:0)

如果运行验证的模型是active,那么您可以将state添加为另一个范围:

validates :name, uniqueness: { scope: [:user_id, :state] }

请注意,状态为active的模型会检查其他active的唯一性,但deleted状态会检查其他deleted

答案 1 :(得分:0)

您可以在模型中

  validates_uniqueness_of :field_name, :scope => :second_field_name, :message => 'error_message' , :condition => ['state = ?', 'active']