undefined method `gsub!' for 2012-01-22 17:00:00 -0500..2012-01-23 00:00:00 -0500:Chronic::Span

Hey all,

I am getting this error:

NoMethodError (undefined method `gsub!' for 2012-01-22 17:00:00
-0500..2012-01-23 00:00:00 -0500:Chronic::Span):

in this code:

          date_range = Chronic.parse(the_date, :guess =>
false)

            reports.sum_distance_by_date(date_range).each do |d|
              u[:m] << d
            end

  def self.sum_distance_by_date(time)

    time = time ? Date.parse(time) : Date.today.to_s
    reports = find_by_sql(["SELECT date_trunc('day', time),
SUM(distance * 0.000621371192) AS sum FROM reports WHERE \"time\" = ?
GROUP BY date_trunc('day', time)", time])
    reports
  end

Basically Chronic returns a range back, and I just want to be able to
use that result inside the find_by_sql query to get all records by
that date.

thanks for response

Hey all,

I am getting this error:

NoMethodError (undefined method `gsub!' for 2012-01-22 17:00:00
-0500..2012-01-23 00:00:00 -0500:Chronic::Span):

in this code:

         date_range = Chronic.parse(the_date, :guess =>
false)

try to add logger:
logger.debug "*** '#{date_range}', class is #{date_range.class}"

           reports.sum_distance_by_date(date_range).each do |d|
             u[:m] << d
           end

def self.sum_distance_by_date(time)

   time = time ? Date.parse(time) : Date.today.to_s
   reports = find_by_sql(["SELECT date_trunc('day', time),
SUM(distance * 0.000621371192) AS sum FROM reports WHERE \"time\" = ?
GROUP BY date_trunc('day', time)", time])
   reports
end

better to write as

def self.sum_distance_by(time = nil)
  time ||=Date.today
  reports = find_by_sql(...., time)
end

as Date.today is Date class, the same as Date.parse()

tom

thanks for response,

Now I get a new issue:

ActiveRecord::StatementInvalid in HomesController#map

PGError: ERROR: time zone displacement out of range: "(2012-01-23
10:00:00 -0500..2012-01-24 00:00:00 -0500)"
LINE 1: ....000621371192) AS sum FROM reports WHERE "time" =
'(2012-01-...
                                                             ^
: SELECT date_trunc('day', time), SUM(distance * 0.000621371192) AS
sum FROM reports WHERE "time" = '(2012-01-23 10:00:00
-0500..2012-01-24 00:00:00 -0500)' GROUP BY date_trunc('day', time)

with:

  def self.sum_distance_by(time=nil)

    time ||= Date.today
    reports = find_by_sql(["SELECT date_trunc('day', time),
SUM(distance * 0.000621371192) AS sum FROM reports WHERE \"time\" = ?
GROUP BY date_trunc('day', time)", String(time)])
    #reports.each { |r| logger.info "sum: #{r.sum} date:
#{r.date_trunc}"}
    reports
  end

using Chronic.parse without false got rid of that issue

You have to convert the input to string as: the_date.to_s

Chronic.parse(the_date.to_s)