This project is archived and is in readonly mode.
Hashes with Time instances in it breaks when to_json is called on it.
Reported by August Lilleaas | May 30th, 2010 @ 01:59 AM | in 3.0.2
Hashes with time objects in them will cause an error when
to_json
is called on it.
{:date => Time.utc(2008, 5, 17)}.to_json
The stack trace is rather peculiar as well. Here's a snippet from a irb session, with backtrace silencers removed.
ruby-1.8.7-p249 > {:foo => Time.now}.to_json
ArgumentError: wrong number of arguments (2 for 0)
from (irb):1:in `to_json'
from (irb):1
Attached a patch with a simple test case that will demonstrate the breakage.
Comments and changes to this ticket
-
Neeraj Singh May 30th, 2010 @ 04:33 AM
I tested it with rails edge.
I am not able to produce this problem with script/console.
ruby-1.8.7-p249 > {:date => Time.utc(2008, 5, 17)}.to_json => "{\"date\":\"2008-05-17T00:00:00Z\"}" ruby-1.8.7-p249 > {:date => Time.utc(2008, 5, 17)}.to_json => "{\"date\":\"2008-05-17T00:00:00Z\"}"
I am not able to produce problem with rails runner
$ rails runner 'User.lab' {"date1":"2008-05-17T00:00:00Z"} class User < ActiveRecord::Base def self.lab t = Time.utc(2008, 5, 17) real = {:date1 => t}.to_json puts real end end
However the attached test code is indeed failing which is really weird. Without digging dip into it I have a feeling that in test somewhere something is getting changed which is messing up to_json.
-
Santiago Pastorino May 30th, 2010 @ 05:39 AM
- Milestone cleared.
- Tag changed from activesupport, json, rails3 to activesupport, json, patch, rails3
- State changed from new to open
- Assigned user set to Yehuda Katz (wycats)
Neeraj try this and you will see the failure ...
>> santiago@debian:/tmp/myapp$ rails c Loading development environment (Rails 3.0.0.beta3) >> {:date => Time.utc(2008, 5, 17)}.to_json NoMethodError: undefined method `to_json' for {:date=>Sat May 17 00:00:00 UTC 2008}:Hash from (irb):1
Here is a fix i think the code regarding to json on AS is not properly organized, i will refactor this at some point. -
August Lilleaas May 30th, 2010 @ 12:22 PM
@Neeraj Singh: Perhaps you have the json gem vendored elsewhere, or directly in the Gemfile, causing Rails to use that one instead of the bundled one? I'm also on edge rails, btw:
gem 'rails', :git => 'git://github.com/rails/rails.git'
. -
Neeraj Singh May 30th, 2010 @ 02:50 PM
This is what I have in my Gemfile.
$ cat Gemfile source 'http://rubygems.org' #gem 'rails', '3.0.0.beta3' gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'sqlite3-ruby', :require => 'sqlite3'
in console
ruby-1.8.7-p249 > {:date => Time.utc(2008, 5, 17)}.to_json => "{\"date\":\"2008-05-17T00:00:00Z\"}"
Really weird that I'm not able to reproduce it.
-
Repository June 26th, 2010 @ 08:15 PM
- State changed from open to committed
- Importance changed from to Medium
(from [926ca9c102db5034d4eb1ab0f915ea643145e284]) Load JSON additions (as to_json) on active_support/all.
[#4730 state:committed]
Signed-off-by: José Valim jose.valim@gmail.com
http://github.com/rails/rails/commit/926ca9c102db5034d4eb1ab0f915ea... -
seamusabshere July 16th, 2010 @ 02:31 PM
- Assigned user changed from Yehuda Katz (wycats) to Santiago Pastorino
che Santiago,
I think the original problem remains:
$ gem list json *** LOCAL GEMS *** json (1.4.3) json_pure (1.4.3) $ gem list activesupport *** LOCAL GEMS *** activesupport (3.0.0.beta4, 2.3.8, 2.3.5) $ irb ruby-1.8.7-head > require 'rubygems' => true ruby-1.8.7-head > require 'active_support/json' => true ruby-1.8.7-head > { :hello => Time.now }.to_json ArgumentError: wrong number of arguments (2 for 1) from (irb):3:in `to_json' from (irb):3
Best,
Seamus -
csnk May 18th, 2011 @ 08:30 AM
We are the professional clothing manufacturer and clothing supplier, so we manufacture kinds of custom clothing manufacturer. welcome you to come to our china clothing manufacturer and clothing factory.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>
People watching this ticket
Attachments
Tags
Referenced by
- 4730 Hashes with Time instances in it breaks when to_json is called on it. [#4730 state:committed]