Rails to_json использует разные DATE_FORMATS, которые .to_s - PullRequest
3 голосов
/ 14 февраля 2012

Со следующим в моем rails_defaults.rb:

Date::DATE_FORMATS[:default] = '%m/%d/%Y'
Time::DATE_FORMATS[:default]= '%m/%d/%Y %H:%M:%S'

Почему отличаются следующие результаты:

ruby-1.9.2-p180 :005 > MyModel.find(2).to_json(:only => :start_date)
 => "{\"start_date\":\"2012-02-03\"}" 

ruby-1.9.2-p180 :006 > MyModel.find(2).start_date.to_s
 => "02/03/2012" 

И, что более важно, как мне заставить to_json использовать%m/%d/%Y

1 Ответ

10 голосов
/ 14 февраля 2012

Поскольку стандартный формат JSON для даты - %Y-%m-%d, и изменить его невозможно, если вы не переопределите Date#as_json (не делайте этого, иначе ваше приложение начнет работать неправильно).

См. https://github.com/rails/rails/blob/master/activesupport/lib/active_support/json/encoding.rb#L265-273

class Date
  def as_json(options = nil) #:nodoc:
    if ActiveSupport.use_standard_json_time_format
      strftime("%Y-%m-%d")
    else
      strftime("%Y/%m/%d")
    end
  end
end
...