2012-02-14 5 views
3

следующее в моем rails_defaults.rb:Rails to_json использует различные DATE_FORMATS что .to_s

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?

ответ

10

Поскольку стандартный формат 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 
+0

Интересно. Благодарю. –

+2

+1 @ simone-carletti, насколько вы знаете? – ecoologic

Смежные вопросы