我正在尝试验证布尔字段的唯一性,但仅限于它是真的。我的模型中定义了以下内容:
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
的Feed时会返回一行,这与它应该执行的操作完全相反。我希望BINARY 't'
只是true
,因为该字段是布尔值。因此,我觉得查询应该是这样的:
SELECT 1 AS one FROM `feeds` WHERE `feeds`.`org_feed` = true LIMIT 1
我是否需要以某种方式告诉验证这是一个布尔字段?
答案 0 :(得分:6)
您可以在模型中使用以下代码:
validates :org_feed, uniqueness: true, if: :org_feed_is_true?
def org_feed_is_true?
org_feed == true
end
有关详细信息,请查看http://guides.rubyonrails.org/active_record_validations.html#using-a-symbol-with-if-and-unless。