在Rails中有条件地验证布尔值的唯一性



我试图验证布尔字段的唯一性,但只有当它是真的。我在模型中定义了以下内容:

validates_uniqueness_of :org_feed, if: :org_feed

当这个验证运行时,它生成以下SQL:

SELECT 1 AS one FROM `feeds` WHERE `feeds`.`org_feed` = BINARY 't' LIMIT 1

但是,这个查询在找到一个布尔org_feed为0的提要时返回一行,这与它应该做的完全相反。我希望BINARY 't'就是true,因为字段是布尔值。因此,我觉得查询应该是这样的:

SELECT 1 AS one FROM `feeds` WHERE `feeds`.`org_feed` = true LIMIT 1

我需要告诉验证这是一个布尔字段吗?

您可以在模型中使用以下代码:

validates :org_feed, uniqueness: true, if: :org_feed

请访问http://guides.rubyonrails.org/active_record_validations.html#using-a-symbol-with-if-and-unless了解更多信息

最新更新