ice_cube и recurring_select драгоценных камней и вхождений

Я пытаюсь использовать [удивительную] функциональность гемов ice_cube и recurring_select для обработки повторяющихся событий. у меня есть schedule (текст) столбец в моей базе данных и следующее в модели событий:

  def schedule=(new_schedule)
    write_attribute(:schedule, RecurringSelect.dirty_hash_to_rule(new_schedule).to_yaml)
  end

  def converted_schedule
     Schedule.from_yaml(self.schedule, :start_date_override => self.start_date)
  end 

Глядя на столбец расписания в psql, он, кажется, правильно хранит расписание.

Вот моя форма:

.control-group
  = f.label 'Date', :class => 'control-label'
  .controls
    = f.text_field :start_date, :class => 'datepicker'

.control-group
  = f.label 'Recurring?', :class => 'control-label'
  .controls
    = f.select_recurring :schedule, :allow_blank => true

Тем не менее, когда я пытаюсь вывести converted_schedule, он показывает только дату начала и не показывает никаких дополнительных дат. У меня есть несколько подозрений, что я возился безуспешно... возможно, YAML не конвертируется правильно для converted_schedule метод? Возможно, мне нужна дата окончания (я не вижу, где эта функция доступна на recurring_select)?

1 ответ

Решение

Посоветовавшись с Джоном Крепецци (автором драгоценного камня ice_cube - спасибо, Джон!), Я обнаружил, что храню правило для повторений в отличие от самого графика. Следующий код исправил проблему:

serialize :schedule, Hash

def schedule=(new_schedule)
  write_attribute(:schedule, RecurringSelect.dirty_hash_to_rule(new_schedule).to_hash)
end

def converted_schedule
  the_schedule = Schedule.new(self.start_date)
  the_schedule.add_recurrence_rule(RecurringSelect.dirty_hash_to_rule(self.schedule))
  the_schedule
end

Примечание: я также переключился на сохранение этого столбца в виде хэша вместо YAML, как было ранее опубликовано.

Другие вопросы по тегам