1

我正在研究具有状态列(活动或已删除)的模型

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

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'

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

4

2 回答 2

0

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

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

请记住,具有active状态的模型将检查其他模型的唯一性active,但deleted一个模型将检查其他模型deleted

于 2013-09-04T19:31:41.630 回答
0

在你的模型中你可以做

  validates_uniqueness_of :field_name, :scope => :second_field_name, :message => 'error_message' , :condition => ['state = ?', 'active']
于 2013-09-04T19:35:46.347 回答