我有一个带有日期时间属性的模型。我正在尝试验证将更新模型的传入 JSON。但如果它是无效的日期时间,ActiveRecord 似乎将属性的值设置为 nil。我无法以适当的错误响应,因为该属性允许为零。我究竟做错了什么?
代码:
class DatetimeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
value.to_datetime rescue record.errors[attribute] << (options[:message] || "must be a date.")
end
end
class Foo
# column :my_date, :datetime
validates :my_date, :allow_nil => true, :datetime => true
end
安慰:
1.9.3p125 :001 > x = Foo.new
=> #<Foo id: nil, my_date: nil>
1.9.3p125 :001 > x.my_date = 'bad value'
=> 'bad value'
1.9.3p125 :001 > x.my_date
=> nil
1.9.3p125 :001 > x.valid?
=> true
就 ActiveRecord 而言,将 datetime 属性设置为 'bad_value' 等同于将其设置为 nil,因此我无法验证它,因为 my_date 不是必需的。这对我来说似乎是一个错误。最好的解决方法是什么?
谢谢!