Форматы даты действительны только в вашем приложении, а не в базе данных — они отвечают только за то, как объекты времени отображаются вашим пользователям, и не влияют на способ хранения данных.
К сожалению, такого понятия, как время, нет только в базе данных (по крайней мере, я о них не слышал, и поверьте мне, я искал его, так как он мне нужен в моем текущем проекте)
Самое простое решение
Однако во многих случаях имеет смысл хранить только время события. В текущем проекте мы решили хранить его в формате целого числа 60 * hour + minutes
. К сожалению, на этом мы остановились в проекте. :(
На шаг впереди
Затем вы можете создать вспомогательный класс (просто скаффолд - требуется дополнительная работа, например, валидация и т.д.):
class SimpleTime
attr_accessor :hour, :minute
def initialize(hour, minute)
@hour, @minute = hour, minute
end
def self.parse(integer)
return if integer.blank?
new(integer / 60, integer % 60)
end
def to_i
60 * @hour + @minute
end
end
а затем переопределить сеттер и геттер:
class Model < ActiveRecord::Base
def time
@time ||= SimpleTime.parse(super)
end
def time=(value)
super(value.to_i)
end
end
Дальнейшее веселье
Теперь есть больше вещей, которые вы могли бы сделать. Например, вы можете написать расширение simple_time
для active_record, которое автоматически переопределит сеттеры и геттеры для списка переданных атрибутов. Вы даже можете обернуть его в небольшой драгоценный камень и сделать его реальным (отсутствующие проверки, синтаксические анализаторы строкового формата, обработка значений _before_type_cast
и т. д.).
person
BroiSatse
schedule
03.06.2015