Форматите на датата са валидни само във вашето приложение, но не и в базата данни - те са отговорни само за начина, по който обектите за време се показват на вашите потребители и няма да повлияят на начина, по който се съхраняват данните.
За съжаление няма такава концепция като време само в базата данни (поне аз не съм чувал за такава и повярвайте ми, потърсих я, тъй като имам нужда от нея в текущия си проект)
Най-простото решение
В много случаи обаче има смисъл да се съхранява само времето на събитието. В настоящия проект решихме да го съхраним във формат на цяло число 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