我正在处理一个具有状态列(活动或已删除)的模型
现在,我有像这样的唯一性验证
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'
此问题的一个解决方案是添加默认范围,但在我的情况下,我不需要具有默认范围。
答案 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']