ActiveSupport переопределяет поведение #to_json - PullRequest
3 голосов
/ 14 февраля 2011

Как научить ActiveSupport не переопределять стандартное поведение гема "json"?

require "rubygems"
gem "json"
require "json"

class Time
  def to_json(options = nil)
    "custom string"
  end
end

hash = { :x => Time.now }

puts hash.to_json # => {"x":custom string}

gem "activesupport"
require "active_support/core_ext/object" # Somewhere into Rails internals

puts Time.now.to_json # => custom string

puts hash.to_json # => {"x":"2011-02-14T16:30:10+05:00"}

Ожидается: после запроса "active_support / core_ext / object" Я хочу получить результат {"x": пользовательская строка}.

Ответы [ 3 ]

1 голос
/ 14 февраля 2011

Rails начиная с v2.3.3 переключился на #as_json по ряду существенных причин.Так танцуй с этим.

http://weblog.rubyonrails.org/2009/7/20/rails-2-3-3-touching-faster-json-bug-fixes

0 голосов
/ 14 февраля 2011

Как насчет форматирования значения Time.now с помощью strftime, например Time.now.strftime("format") для строки форматирования, см. Документы Ruby .

Или, если вы действительно не хотитеотформатируйте его, просто используйте его как строковый вызов Time.now.to_s

0 голосов
/ 14 февраля 2011

Вы должны определить

class Time
  def to_json(options = nil)
    "custom string"
  end
end

после

gem "activesupport"
require "active_support/core_ext/object" 

кода.

...