Как записать дату в базу?

rails 4, sqlite

Поле в базе типа DATE. Достается из базы в формате yyyy-mm-dd. При рендеринге преобразовываю в dd.mm.yyyy. Правку в браузере осуществляю в этом же формате. Отправляю на сервер все в том же формате dd.mm.yyyy. Внимание вопрос: Как преобразовать в yyyy-mm-dd непосредственно перед записью в базу, ведь rails хочет получить дату именно в этом формате? Если вопрос понятен, то можно дальше не читать, а то можно запутаться). В контроллере:
def update
  @model.update_attributes(x)
end

Причем с х все сложно, все зависит от различных параметров. Их много, они могут быть, а могут не быть, могут называться так или иначе. Ввиду этого я не хочу явно указывать какие из прилетевших параметров типа date и в контроллере их преобразовывать. Видится мне, что это как то нужно в модели/лях (потому как связанные) объявить это преобразование, но пока не знаю, как рельсы обрабатывают такое. Например, есть поле warranty (гарантия до). Тогда в модели если объявить:
def warranty
  '08.03.2016'
end

Тогда из базы всегда будет вылезать восьмое марта. Но это для чтения, а как быть для записи?
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
@sunnmas Автор вопроса
Ruby
Итого в коде модели нужно объявить геттер и сеттер:
attr_accessor :warranty
	def warranty=(value)
		write_attribute :warranty, value.to_date
	rescue
            #если строка, пришедшая в параметрах не валидна, в базу пойдет null
	end
	def warranty
		self[:warranty].strftime '%d.%m.%Y' if self[:warranty]
	end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы