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

66 views
Skip to first unread message

John Merlino

unread,
Jan 22, 2012, 5:36:47 PM1/22/12
to Ruby on Rails: Talk
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

Tom Meinlschmidt

unread,
Jan 22, 2012, 5:46:20 PM1/22/12
to rubyonra...@googlegroups.com

On Jan 22, 2012, at 23:36 , John Merlino wrote:

> 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

>
> 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
>

> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

--
===============================================================================
Tomas Meinlschmidt, MS {MCT, MCP+I, MCSE, AER}, NetApp Filer/NetCache

www.meinlschmidt.com www.maxwellrender.cz www.lightgems.cz
===============================================================================

John Merlino

unread,
Jan 23, 2012, 10:21:56 AM1/23/12
to Ruby on Rails: Talk
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

John Merlino

unread,
Jan 23, 2012, 10:33:28 AM1/23/12
to Ruby on Rails: Talk
using Chronic.parse without false got rid of that issue

Velimir L.

unread,
Jan 23, 2012, 4:42:53 PM1/23/12
to rubyonra...@googlegroups.com
You have to convert the input to string as: the_date.to_s

Chronic.parse(the_date.to_s)

--
Posted via http://www.ruby-forum.com/.

Reply all
Reply to author
Forward
0 new messages