Как заставить назначение даты в американском формате в переменную Date работать в Rails 3 - PullRequest
0 голосов
/ 26 июля 2011

Мои пользователи вводят даты в американском формате (мм / дд / гггг). При сохранении модели атрибуты даты превращаются в ноль:

my_model.start_date = "07/30/2011"

puts my_model.start_date
nil

Я получаю неверную ошибку даты, если я сделаю это в консоли:

Date.parse("07/30/2011")

Как вы заставляете приложение принимать американский формат даты? Я знаю, что приложение должно правильно обрабатывать локализацию, но мне нужен краткосрочный патч.

Ответы [ 2 ]

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

Я нашел драгоценный камень, который делает то же самое, и все, что вам нужно сделать, это поместить его в ваш файл драгоценного камня:

gem 'american_date'

Я знаю, что это своего рода старый пост, но я подумал, что это может помочь другим людям и немного проще, чем патч обезьяны.

2 голосов
/ 26 июля 2011

После долгих размышлений я нашел это (опубликованное Тройком в git https://gist.github.com/922048)

# Date.parse() with Ruby 1.9 is now defaulting to the European date style where the format is DD/MM/YYYY, not MM/DD/YYYY
# patch it to use US format by default
class Date
  class << self
    alias :euro_parse :_parse
    def _parse(str,comp=false)
      str = str.to_s.strip
      if str == ''
        nil
      elsif str =~ /^(\d{1,2})[-\/](\d{1,2})[-\/](\d{2,4})/
        year,month,day = $3.to_i,$1,$2
        date,*rest = str.split(' ')
        year += (year < 35 ? 2000 : 1900) if year < 100
        euro_parse("#{year}-#{month}-#{day} #{rest.join(' ')}",comp)
      else
        euro_parse(str,comp)
      end  
    end
  end
end

Вставьте это в config / initializiers / american_date_monkey_patch.rb и все готово.

Если ваши пользователи не все американцы, тогда это решение не для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...