Blank DateTime versus Nil DateTime

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

On 3/20/08, Florencio C. [email protected] wrote:

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.


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

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

Rick Denatale wrote:

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.

On Mar 20, 2008, at 1:00 PM, Florencio C. wrote:

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.

Uh, just like Rick said. deadline_before_typecast give you the
attribute “deadline” in its original format (which is often a string).

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs