Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 日历中的重复事件-Rails_Ruby On Rails_Ruby On Rails 3_Calendar_Fullcalendar_Recurring Events - Fatal编程技术网

Ruby on rails 日历中的重复事件-Rails

Ruby on rails 日历中的重复事件-Rails,ruby-on-rails,ruby-on-rails-3,calendar,fullcalendar,recurring-events,Ruby On Rails,Ruby On Rails 3,Calendar,Fullcalendar,Recurring Events,我正在寻找模拟重复事件的最佳方法。我正在使用fullcalendar显示事件。但我想重复发生的事件最好在rails后端处理 我已经研究了其他问题和现有的示例代码,但没有找到任何适合的 它的行为应该类似于谷歌日历。因此,应该可以删除/修改定期事件系列的单个事件。但是在数据库中保存事件系列的所有事件似乎效率低下。此外,还可以创建单个事件而不重复发生 什么是好的模型架构 我的事件模型现在看起来是这样的(没有附加属性): #表名:事件 # #id:整数不为空,主键 #员工id:整数 #创建时间:date

我正在寻找模拟重复事件的最佳方法。我正在使用fullcalendar显示事件。但我想重复发生的事件最好在rails后端处理

我已经研究了其他问题和现有的示例代码,但没有找到任何适合的

它的行为应该类似于谷歌日历。因此,应该可以删除/修改定期事件系列的单个事件。但是在数据库中保存事件系列的所有事件似乎效率低下。此外,还可以创建单个事件而不重复发生

什么是好的模型架构

我的事件模型现在看起来是这样的(没有附加属性):

#表名:事件
#
#id:整数不为空,主键
#员工id:整数
#创建时间:datetime
#更新时间:datetime
#开始时间:datetime
#结束时间:datetime
#
类事件
只是我头脑中的一个想法,也许comenters会指出一个我目前没有想到的问题:

我会制作一个
RecurringEvent
模型(或者你想叫它什么),这个
模型有很多:事件

假设每个事件都是由一名员工创建的(基于您的笔记),那么
RecurringEvent
也将
归属于:employee
。然后,您可以建立一个
has_many:through
关系,其中员工有许多事件,并且有许多重复事件

RecurringEvent模型可以有一个开始日期和一个模式,它最初可以使用这个模式来创建单独发生的事件。然后,对于定期系列中的任何事件,您可以修改或删除该个别事件,但也可以“重新生成系列”,删除系列中的所有事件(或系列中的所有未来事件),并基于新模式重新生成这些事件,例如,将会议从“每周二”移动到“每周四”

另一个好处是,你可以创建一个重复事件一览表,这可能会让你更好地了解人们的主要义务

就像我说的,从我的头脑中,这就是我将如何处理它,但这只是一个想法,我还没有建立任何类似的东西,所以我不知道我建议的方法中是否有任何大的缺陷


祝你好运,请把你最后要做的事情贴出来

以下是我将如何对此进行建模。我没有太多使用谷歌日历,所以我的功能基于谷歌的重复事件

所有模型都应具有通常的id、在创建时的id、在更新时的id属性。列出了自定义属性。如果该属性是另一个模型,您将通过一个关联来实现它,例如
有一个
属于

  • 重现期
    • Event
      base\u Event\code>有一个:base\u Event,:class\u name'Event'
  • Time
    end#u date#如果永远重复,则可能为零
  • WeeklyRecurrence
    recurrencehas_one:recurrence,:as=>:recurrence
  • Array[OccurrenceOverride]
    overrides\code>有很多:overrides,:class\u name=>“OccurrenceOverride”
  • 重现期从其基本事件开始的日期开始。另外,我假设一个
    事件
    的雇员id是指创建该事件的雇员。
    重现期也将属于创建基本事件的员工

    模型取决于您希望如何灵活地指定重复发生。你会支持“周二和周四每两周从上午10点到上午11点,下午2点到下午3点”还是“每周重复”?这里的模型只支持“每周重复”、“每两周重复”等。;如果需要,可以扩展它

    • WeeklyRecurrence
      • Integer
        复发间隔周
      • RecurrencePeriod
        recurrence\u period
    属于:recurrence,:多态=>true
    我在这里使用,因为我认为如果您想要不止一种类型的复发,例如
    周复发
    日复发
    ,它们可能会很有用。但我不确定它们是否是正确的建模方法,因此如果它们不是,只需使用
    has\u one:weekly\u recurrence
    besides\u to:recurrence\u period

    该库似乎对计算复发率很有用。如果上面的
    WeeklyRecurrence
    功能不够强大,您可能只想在模型中存储一个冰块
    Schedule
    对象,替换
    WeeklyRecurrence
    。要在模型中存储
    Schedule
    对象,请将其另存为属性“Schedule”,将
    serialize:Schedule
    放入模型定义中,并在数据库中生成文本列“Schedule”

    OccurrenceOverride
    处理正在编辑的重复事件的单个实例的情况

    • OccurrenceOverride
      • RecurrencePeriod
        RecurrencePeriod\u to\u override属于:RecurrencePeriod\u to\u override,:class\u name=>“RecurrencePeriod”
      • Time
        original_start_Time#唯一标识该重现期内要替换的重现期
      • Event
        replacement\u Event\code>有一个:replacement\u Event,:class\u name=>“Event”;如果该重复周期已被删除而不是编辑,则可能为零
    当需要在视图中显示事件时,可以临时生成它们,而不是单独存储事件的每个事件。在
    RecurrencePeriod
    中,创建一个方法
    generate\u events\u(开始日期、结束日期)
    ,该方法生成
    事件
    s,否
    # Table name: events
    #
    #  id              :integer         not null, primary key
    #  employee_id     :integer
    #  created_at      :datetime
    #  updated_at      :datetime
    #  starts_at       :datetime
    #  ends_at         :datetime
    #
    
    class Event < ActiveRecord::Base
      attr_accessible :starts_at, :ends_at
    end
    
    # Holds most of my event's data; name, description, price ...
    class Event < ActiveRecord::Base
      has_many :schedules
      has_many :occurrences
      attr_accessible :started_at, :expired_at # expired_at is optional
    end
    
    # Holds my schedule object
    class Schedule < ActiveRecord::Base
      belongs_to :event
      attr_accessible :ice_cube_rule # which returns my deserialized ice_cube object
    end
    
    # Holds generated or manually created event occurrences 
    class Occurrence < ActiveRecord::Base
      belongs_to :event
      attr_accessible :started_at, :expired_at
      attr_accessible :generated # helps me tell which occurrences are out of an ice_cube generated serie
      attr_accessible :canceled_at
    end
    
    before_save :create_weekly_schedule, if: :recurring
    
    after_save :create_occurences_if_recurring
    
    def create_occurences_if_recurring
      schedules.each do |sched|
        occurences.create(start_date: sched.start_time, end_date: sched.end_time)
      end
    end