Answers:
从Rails 3开始,您可以执行以下操作:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
对布尔字段的状态()进行常规验证(该字段对于false
值无效)。但是在Rails 3和Rails 4中,它们validates :field, inclusion: [true, false]
都会测试是否包含在值列表中,并且具有副作用来测试字段的存在(nil
当然,除非这些值之一是)。
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
我相信对于布尔字段,您将需要执行以下操作:
validates_inclusion_of :field_name, :in => [true, false]
从较旧版本的API中:“这是由于Object#blank?处理布尔值的方式。false.blank?#=> true”
我不确定这对Rails 3是否仍然适用,希望对您有所帮助!
true
。
当我应用它时,我得到:
比赛应该警告:
您经常validate_inclusion_of
断言布尔列允许布尔值,而不允许非布尔值。请注意,这不可能完全测试,因为布尔列会自动将非布尔值转换为布尔值。因此,您应该考虑删除此测试。
您可以使用较短的版本:
validates :field, inclusion: [true, false]
额外的想法。在处理枚举时,我也喜欢使用常量:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
根据Rails Docs 5.2.3回答
此帮助程序(存在)验证指定的属性不为空。它使用空白吗?检查值是nil还是空白字符串的方法,即,该字符串为空或包含空格。
既然是false.blank?是正确的,如果要验证布尔字段的存在,则应使用以下验证之一:
validates :boolean_field_name, inclusion: { in: [true, false] }