Hi!
These days I have been having trouble with a test that tried to test
DateTime functionality. I have discovered that a NULL DateTime is
auto-type casted to NIL by Rails.
My problem here is that I have a field :datetime and I want to allow
NULL datetimes but not wrong datetimes. With this validation if deadline
is wrong or if is is blank it returns true. How I can accomplish this?
protected
def validate
if deadline.to_s.blank?
true
else
begin
dt = DateTime.parse(deadline.to_s)
rescue ArgumentError
errors.add(:deadline, "Deadline has invalid syntax")
end
end
end
def validate
deadline_str = deadline_before_typecast
unless deadline_str.blank?
begin
DateTime.parse(deadline_str)
rescue ArgumentError
errors.add(:deadline, "Deadline has invalid syntax")
end
end
end
Note that the return value of the validate method isn't used, what
counts is whether the model has any errors after all of the
validations have been run.
You could also attack it without overriding validate:
validate_each :deadline, :if=>lambda{|record| !
record.deadline_before_typecast.blank?} do |record, attr, value|
DateTime.parse(deadline_before_typecast)
rescue ArgumentError
errors.add(:deadline, "has invalid date syntax")
end
end
def validate
deadline_str = deadline_before_typecast
unless deadline_str.blank?
begin
DateTime.parse(deadline_str)
rescue ArgumentError
errors.add(:deadline, "Deadline has invalid syntax")
end
end
end
How can I access to the variable before the typecast? At the validate
method beginning I think the variable is already typecasted and
converted to nil.