2009-09-15 4 views
2

В моей модели у меня есть атрибут «продолжительность» (в секундах как целое число). Но новые/редактировать представления имеют вход для часов, минут, секунд.Как конвертировать часы ввода, минуты, секунды

Должен ли я иметь в модели (attr_accessor: hours,: minutes,: seconds), то каким образом я могу преобразовать эти виртуальные атрибуты в свой атрибут «duration», исходя из Java, у меня был бы setter/getter на «длительности»!

ответ

6

Вы можете установить фильтр before_save, чтобы вычислить его значение из значений ваших виртуальных аксессуаров (часы, минуты и секунды). Что-то вроде:

class Model << AR:Base 

    attr_accessor :hours, :minutes, :seconds 
    before_save :update_duration 

    def update_duration 
    duration = = hours*3600 + minutes*60 + secods 
    end 

end 

Это немного грубо, но должно дать вам представление о том, как оно может работать. Всякий раз, когда вы вызываете метод «Сохранить» на модели (либо при создании или обновлении действий), фильтр будет вызываться перед тем, как получить доступ к BD, обновить его значение и затем продолжить его правильно.

+0

Парам внутри модели, вы уверены в этом ...? – nitecoder

+0

Парам в модели не имеет смысла! – railsuser

+0

Вы правы, извините, они предназначены только для контроллера, а не для модели. Я скорректировал его соответствующим образом. – Yaraher