Rails:如何验证某些东西是否为布尔值?

时间:2010-08-31 10:20:43

标签: ruby-on-rails validation

rails是否有一个像validates_numericality_of这样的验证器用于布尔值,还是我需要自己滚动?

5 个答案:

答案 0 :(得分:226)

从Rails 3开始,你可以这样做:

validates :field, inclusion: { in: [ true, false ] }

答案 1 :(得分:38)

我相信你需要做一个布尔字段,例如:

validates_inclusion_of :field_name, :in => [true, false]

API的旧版本开始:“这是由于Object#blank的方式处理布尔值.false.blank?#=> true”

我不确定这对Rails 3是否仍然没问题,希望有所帮助!

答案 2 :(得分:9)

当我申请时,我得到:

来自shoulda-matcher的警告:

您正在使用validate_inclusion_of断言布尔列 允许布尔值,不允许使用非布尔值。请注意它 是不可能完全测试这个,因为布尔列将 自动将非布尔值转换为布尔值。因此,你 应考虑删除此测试。

答案 3 :(得分:4)

您可以使用较短的版本:

validates :field, inclusion: [true, false]

额外的想法。在处理枚举时,我也喜欢使用常量:

KINDS = %w(opening appointment).freeze

enum kind: KINDS

validates :kind, inclusion: KINDS

答案 4 :(得分:1)

根据Rails Docs 5.2.3

进行回答

此帮助程序(存在)验证指定的属性不为空。它使用空白吗?一种检查值是nil还是空白字符串的方法,即,该字符串为空或由空格组成。

因为是假的?空白?是的,如果您要验证布尔字段的存在,则应使用以下验证之一:

validates :boolean_field_name, inclusion: { in: [true, false] }