8

我正在尝试利用 ice_cube 和 recurring_select gem 的 [awesome] 功能来处理重复发生的事件。我的数据库中有一个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 上可用)?

4

1 回答 1

14

在咨询了 John Crepezzi(ice_cube gem 的作者——感谢 John!)后,我发现我存储的是重复规则,而不是时间表本身。以下代码修复了该问题:

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。

于 2013-06-13T19:24:58.923 回答