0

У меня есть форма, которую я хотел бы упростить. Я записываю startdate и enddate, но хотел бы показать пользователю только начальную дату, а затем выпадающее число с количеством дней.виртуальный атрибут с датами

Но у меня проблемы с моей моделью и ее правильное хранение.

Первая часть работает.

def date=(thedate) 
    #puts the startdate in the correct format... 
    self.startdate = Date.strptime(thedate, '%m/%d/%Y') 
    end 

У меня проблема связана с тем, что дата окончания на основе StartDate + в no_days, который сам по себе является виртуальным атрибутом. Я попытался сделать вторую часть как обратный вызов after_validation, но он, похоже, не работает.

def set_dates 
    if self.startdate 
     self.enddate = self.startdate + days 
    end 
    end 

ответ

1

Прежде всего, зачем вам нужно преобразовать атрибут даты в начало? Почему бы вам не использовать что-то вроде f.date_select :startdate в вашей форме?

Затем в вашей модели вам нужно что-то вроде attr_accessor :number_of_days, с помощью которого вы можете получить number_of_days как целое число в вашей форме с помощью f.select :number_of_days, (1..10).to_a (установите массив, как вам нравится).

Вы можете установить функцию обратного вызова следующим образом:

after_validation :set_enddate 

def set_enddate 
    if self.startdate 
    self.enddate = self.startdate + self.number_of_days.days 
    end 
end 
+0

красивые спасибо. Я использую первый атрибут даты, потому что мне не нравится помощник date_select, и я использую текстовое поле с jq-ui datepicker. – holden

Смежные вопросы