Приложение My Rails 4 имеет таблицу встреч, которая имеет следующие атрибуты/столбцы: «дата» (дата данных типа), «start_at» (время набора данных) и «ends_at» (время набора данных). У меня нет столбца «продолжительность», но вы хотите рассчитать разницу между временами «заканчивается на» и «запускается». Мне нужна продолжительность, поэтому я могу поместить валидацию в модель Appointment, чтобы пользователи не могли назначать встречи менее 30 минут или более 2 часов. Я использовал Google для исследования проблемы, но не нашел ничего особенно полезного для того, что я пытаюсь сделать. Я изучаю Rails и пытаюсь найти лучшие практики. Я предполагаю, что место, где логика «длительности» находится в модели, в отличие от представлений. Сейчас я не считаю, что пользователям нужно будет видеть данные продолжительности. Я начал писать метод «длительности» для модели, но не мог заставить логику работать правильно. Вот что я сделал до сих пор:Нужна помощь в написании метода расчета продолжительности (времени) для модели/просмотров?
protected
def duration
(self.ends_at - self.starts_at).to_i
end
я вызываю метод с:
validate :duration, numericality: {greater_than: 30, less_than: 120}
Когда я выполняю код он не создает каких-либо ошибок, но проверка не появляется делать что-нибудь. Пользователи по-прежнему могут назначать встречи менее 30 минут или более 2 часов. Мне нужно предотвратить сохранение обоих сценариев в БД. Я играл с некоторыми утверждениями if и else в методе, но не имел успеха.
Вопросы:
Что случилось с моим текущим кодом?
Есть ли лучший способ подойти к проблеме для достижения моей цели?
Если я решил позже предоставить пользователям информацию о «длительности» через представления, как это сделать, используя встроенный код Ruby?
Я ценю любую помощь и совет!
Thanks Justin! Я рассмотрю этот код при первой возможности. Я буду следить за тобой. – codeinspired
Justin - я пробовал проверку: код длительности, но мне не повезло. Валидация предотвращает сохранение всех назначений независимо от продолжительности. Это как если бы он игнорировал параметры 30, 120 минут. Любые идеи о том, что может быть причиной этого? В очередной раз благодарим за помощь! – codeinspired
Джастин, проблема решена!Ваше добавление «/ 60», чтобы получить продолжительность в минутах, сделало это. Теперь проверка правильности блокирует назначения < 30 or > 120 минут. Фантастика! Кроме того, спасибо за информацию о «докладчиках в Rails». Очень полезно! – codeinspired