在Rails模型中,我有一个属性is_subscriber
,当我构建一个db迁移以将此列添加到数据库时,我将默认值指定为false:
t.boolean "is_subscriber", :default => false
我还在模型中指定需要存在此属性:
validates :is_subscriber, presence: true
那么,为什么在创建模型实例时却没有指定此属性会出现此错误?
2012-05-08T21:05:54+00:00 app[web.1]: ActiveRecord::RecordInvalid (Validation failed: Is subscriber can't be blank):
答案 0 :(得分:48)
来自here
如果要验证是否存在布尔字段(其中 你会想要使用真正的价值观是真是假 validates_inclusion_of:field_name,:in => [true,false]这是应该的 对象#空白的方式?处理布尔值。 false.blank? #=> 真
或者以Rails3方式
validates :field, :inclusion => {:in => [true, false]}
答案 1 :(得分:1)
我用以下方法解决了这个问题:
validates_presence_of :is_subscriber, :if => 'is_subscriber.nil?'
答案 2 :(得分:1)
我认为将它包装在自定义验证器中更为简洁。
/app/validators/is_boolean_validator.rb
中的
class IsBooleanValidator < ActiveModel::EachValidator
def validate_each(record, attribute, parameters)
if !parameters.in? [true,false]
record.errors[attribute] << 'This must be true or false.'
end
end
end
然后你必须通过将以下内容添加到/config/application.rb
config.autoload_paths += %W["#{config.root}/app/validators/"]
(不要忘记重新启动服务器以加载它)
然后,您可以使用
更加整齐地验证validates: :field1, field2, is_boolean: true
答案 3 :(得分:0)
validates :column_name, :inclusion => {:in => [true, false]}