Forum: Ruby on Rails Trouble comparing time and date values

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.
9d4960f8319664f0f7896230eebace73?d=identicon&s=25 DamnBigMan@gmail.com (Guest)
on 2007-05-03 17:35
(Received via mailing list)
I have the following situation:

I have a table with employee schedules in it.  I need to make sure
that overtime work they are claiming doesn't overlap with scheduled
work time.  I have written a method in my events model to check for
(date, time, day) overlap.  This code works fine from the console
however when I create an entry via the form the checking fails and it
allows everything (bad and good).

Here is the appropriate code:


Model

  def overlap?
    courses = Hash.new  # This will hold schedule info

    # The following line of code is necessary since the session
    # can't be accessed from the model.

    id = Project.find(self.project_id).employee_id

    day = Regexp.new(Day.find(self.day_id).code)

    schedules = Schedule.find(:all, :conditions => ["employee_id = ?",
id])

    for entry in schedules
      courses["#{entry.course}"] = [entry.start_time, entry.end_time,
entry.start_date, entry.end_date, "#{entry.days}"]
    end

    courses.each_pair do |key, values|
      if ((self.date >= values[2]) && (self.date <= values[3]))
        if ((self.start_time > values[0]) && (self.start_time <
values[1]))
          if (values[4] =~ day)
            return true
          end
        end
        if  ((self.end_time > values[0]) && (self.end_time <
values[1]))
          if (values[4] =~ day)
            return true
          end
        end
      end
    end


Controller

  def create
    @event = Event.new(params[:event])
    unless @event.overlap?  # We need to make sure there is no
conflict.
      if @event.save
        flash[:notice] = 'Event was successfully created.'
        redirect_to :action => 'list'
      else
        render :action => 'new'
      end
    end
    flash[:notice] = 'There was a problem with this event.'
  end

Here is a transcript of my console session:

>> @event = Event.new
=> #<Event:0x47d5ec0 @new_record=true, @attributes={"day_id"=>nil,
"project_id"=>nil, "title"=>nil, "date"=>nil, "location"=>nil,
"end_time"=>nil, "start_time"=>nil}>
>> @event.day_id = 1
=> 1
>> @event.project_id = 1
=> 1
>> @event.title = "Test"
=> "Test"
>> @event.date = "05/02/2007"
=> "05/02/2007"
>> @event.location = "France"
=> "France"
>> @event.end_time = "13:15"
=> "13:15"
>> @event.start_time = "16:00"
=> "16:00"
>> @event.overlap?
=> true
>> @event.day_id = 2
=> 2
>> @event.overlap?
=> false

It works perfectly here but not in the app.  Any ideas would be
greatly appreciated.  I may be making bad assumptions here.

I'm assuming that the strings I'm providing at converted into the
appropriate datetime objects, as I can compare them with data from the
database via the console with no trouble.

The data that is being compared against in the schedule table was
entered through the appropriate schedule view.

Thanks,
Glen
9d4960f8319664f0f7896230eebace73?d=identicon&s=25 DamnBigMan@gmail.com (Guest)
on 2007-05-03 17:39
(Received via mailing list)
On May 3, 9:35 am, "DamnBig...@gmail.com" <DamnBig...@gmail.com>
wrote:
>
>     day = Regexp.new(Day.find(self.day_id).code)
>       if ((self.date >= values[2]) && (self.date <= values[3]))
>           end
>         end
>       end
>     end
>
       return false
    end

Sorry forgot to copy that last important little bit.
9d4960f8319664f0f7896230eebace73?d=identicon&s=25 DamnBigMan@gmail.com (Guest)
on 2007-05-03 23:47
(Received via mailing list)
I have figured out why it's doing what it's doing.  The time_select
method creates date information too and fills it with the current
date.  There is no way any interval "occurring" today will fall
between times "occurring" in the past.

Now I just have to fix it.

Figured I'd post this in case someone runs across a similar problem in
the future.

On May 3, 9:38 am, "DamnBig...@gmail.com" <DamnBig...@gmail.com>
This topic is locked and can not be replied to.