8

私は、ice_cube および recurring_select gem の [素晴らしい] 機能を利用して、繰り返し発生するイベントを処理しようとしています。データベースに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 に答える