У меня есть форма в рельсах, в которой есть поле даты с маской ввода в формате mm/dd/yyyy
, но в данный момент, чтобы сохранить ее, я получаю сообщение об ошибке из-за формата в модели dd/mm/yyyy
. Я нашел решение, которое может сработать.
def organization_date=(val)
date = Date.strptime(val, “%m/%d/%Y”) if val.present?
write_attribute(:organization_date, date)
end
но мне нужно одно более элегантное решение, потому что у меня больше полей типа даты, и я не могу сделать это для каждого поля, и обновление формата для маски ввода до dd/mm/yyyy
также не вариант, потому что требование клиента состоит в том, чтобы оно было в формат mm/dd/yyyy
Я использую бета-версию Rails 6.0.
Я благодарен за любые идеи, которые помогут решить эту проблему
В вашем config/initializers/
создайте date_format.rb
:
# Date
Date::DATE_FORMATS[:default] = "%m/%d/%Y"
Затем перезапустите сервер rails.
Попробуйте это: Date::DATE_FORMATS[:db] = "%m-%d-%Y"
Если вышеуказанное также не работает, добавьте gem "chronic"
в свой Gemfile и выполните следующие действия: coreyward.svbtle.com/…
вы можете настроить активную запись по умолчанию в этом формате, но я предлагаю следующее решение. так что вы можете легко отформатировать дату по всему приложению.
класс даты патча обезьяны, как это:
# config/initializers/date.rb
class Date
def to_fd
strftime('%m/%d/%Y')
end
end
Применение:
Date.today.to_fd
=> "05/28/2019"
Я думаю, что лучший способ исправить это, создать файл в config/initializers/date_format.rb
module Typecasting
module Date
def cast_value v
::Date.strptime v, "%m/%d/%Y" rescue super
end
end
::ActiveRecord::Type::Date.prepend Date
end
Я уже пытался изменить Date:DATE_FORMATS[:default], но я получаю хорошие результаты только при отображении дат, а не в момент сохранения в базе данных с активной записью :(