Forum: Ruby on Rails should this work? - "validates_inclusion_of :start_date, :in => (Time.now.to_date - 100.years)..(Tim

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
D5df9fcd7ef4c3c937435d7d6adeab2a?d=identicon&s=25 Greg Hauptmann (Guest)
on 2008-11-20 22:23
(Received via mailing list)
wondering if should this work? - "validates_inclusion_of :start_date,
:in => (Time.now.to_date - 100.years)..(Time.now.to_date + 100.years)"
 (doesn't seem to for me)

i.e. should I be able to "validates_inclusion_of" to do date validation.

................
  class GraphOptions < ActiveRecord::BaseWithoutTable
    column :start_date, :date
    validates_inclusion_of :start_date, :in => (Time.now.to_date -
100.years)..(Time.now.to_date + 100.years)
  end
................

tks
Af2ce6689213fdb78913a9662b18da6b?d=identicon&s=25 Rick (Guest)
on 2008-11-21 20:23
(Received via mailing list)
Greg,

validates_inclusion_of is looking for :in to be an enumeration.  In a
simple case (one day granularity) you're asking for a list that's
365.25 * 200 => 73050 items long.

My guess is it's a good thing it didn't work ;-)

Maybe you want to go for a min/max check here.

Rick

On Nov 20, 11:22 am, "Greg Hauptmann" <greg.hauptmann.r...@gmail.com>
D5df9fcd7ef4c3c937435d7d6adeab2a?d=identicon&s=25 Greg Hauptmann (Guest)
on 2008-11-22 07:09
(Received via mailing list)
I've actually run with the following:

  def validate
    errors.add('start_date', 'is not in Date format') if
!start_date.kind_of?(Date)
    errors.add('end_date', 'is not in Date format') if
!end_date.kind_of?(Date)
  end

Its seems that the Rails controller tries to convert it to Date and
either succeeds or fails (without throwing an exception).  So I just
test to see at the subsequent validate stage whether there is a Date
object or not
Af2ce6689213fdb78913a9662b18da6b?d=identicon&s=25 Rick (Guest)
on 2008-11-22 12:05
(Received via mailing list)
Right, but back to your initial question, I don't think my initial
answer was even close to the mark.

I believe the problem you're having is that the validates_inclusion is
looking for an enumeration hanging off the :in.  i.e.  [1,2,3,4,5] or
1..5 will work but (My Name Is Frank)..(Your Name Is Louie) somehow
doesn't look right, does it?

You're doing :in => (Sun, 22 Nov 1908)..(Sun, 22 Nov 2108)
which just isn't going to happen.  Try converting to Julian days, that
way you'll be bounded with two positive integers.

Rick

On Nov 21, 8:08 pm, "Greg Hauptmann" <greg.hauptmann.r...@gmail.com>
Af2ce6689213fdb78913a9662b18da6b?d=identicon&s=25 Rick (Guest)
on 2008-11-22 12:30
(Received via mailing list)
Greg - you might take a look at time_with_zone.rb in ActiveSupport -
I'm looking at 2.2.0 but I know it's in 2.1.2 as well.

a = Time.now
a.is_a?(Time) => true
a = "My name is Fred"
a.is_a?(Time) => false

Maybe closer to what you need?

Rick
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-11-22 14:27
(Received via mailing list)
On 21 Nov 2008, at 19:22, Rick wrote:

>
> Greg,
>
> validates_inclusion_of is looking for :in to be an enumeration.  In a
> simple case (one day granularity) you're asking for a list that's
> 365.25 * 200 => 73050 items long.
>
ranges are enumerable and ruby is smart enough to keep it as a range, eg

r = (-1000000000..1000000000)
does not create a 2 billion element array


Fred
D5df9fcd7ef4c3c937435d7d6adeab2a?d=identicon&s=25 Greg Hauptmann (Guest)
on 2008-11-23 00:53
(Received via mailing list)
thanks - I'm specifically looking at Dates so I might stick with the
below that seems to be working fine...

    errors.add('start_date', 'is not in Date format') if
!start_date.kind_of?(Date)

cheers
Af2ce6689213fdb78913a9662b18da6b?d=identicon&s=25 Rick (Guest)
on 2008-11-24 22:06
(Received via mailing list)
Hello Greg,

So here it is.  After a couple of mail exchanges with Fred, I need to
tell you that I was wrong from the start.  Your initial code as given,

validates_inclusion_of :start_date, :in =>
  (Time.now.to_date - 100.years)..(Time.now.to_date + 100.years)

will work in the case where :start_date is the name of one of your
records fields and is a member of the Time class.

Sorry if my confused meander wasted too much of your time.

Thanks for your help Fred.

Rick

On Nov 22, 1:52 pm, "Greg Hauptmann" <greg.hauptmann.r...@gmail.com>
This topic is locked and can not be replied to.