Rails: 如何验证某个东西是布尔型的?

Rails 是否有一个像 validates_numericality_of这样的布尔验证器,还是我需要自己的验证器?

57270 次浏览

我相信对于布尔字段,您需要执行以下操作:

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

从旧版本的 API: “这是由于方式对象 # 空白?处理布尔值。假的,空白的?# = > true”

我不确定这是否仍然适用于 Rails 3,但是,希望这有所帮助!

因为 Rails 3,你可以做:

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

当我应用这个时,我得到:

来自“应该”匹配者的警告:

You are using validate_inclusion_of to assert that a boolean column 允许布尔值,不允许非布尔值 is not possible to fully test this, as boolean columns will 自动将非布尔值转换为布尔值 should consider removing this test.

你可以使用简短的版本:

validates :field, inclusion: [true, false]

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

KINDS = %w(opening appointment).freeze


enum kind: KINDS


validates :kind, inclusion: KINDS

Answer according to Rails Docs 5.2.3

这个 helper (存在)验证指定的属性不是空的。它用的是空白?方法检查该值是空字符串还是空字符串,即空字符串或由空格组成的字符串。

从假的开始,空白的?为 true,如果你想验证一个布尔字段的存在,你应该使用以下验证之一:

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