我有以下用于使用 FullCalendar 显示事件的架构:
class Event < ActiveRecord::Base
has_many :event_occurrences, dependent: :destroy
def as_json(options = {})
{
:id => self.id,
:title => self.name,
:start => start_time.rfc822,
:end => end_time.rfc822,
}
end
end
class EventOccurence < ActiveRecord::Base
belongs_to :event
end
Event对象的构成(为简洁起见,我删除了一些字段):
=> Event(id: integer, name: string, start_time: datetime, end_time: datetime)
EventOccurence对象的构成:
=> EventOccurrence(id: integer, event_id: integer, date: datetime)
JSON 输出如下所示:
{:id=>1, :title=>"Your title", :location=>"Bermuda", :start=>"Sun, 05 Jan 2014 02:50:07 +0000", :end=>"Sun, 05 Jan 2014 02:51:46 +0000"}
我有一个单独的EventOccurence模型的原因是单独存储重复事件,正如StackOverflow帖子中所建议的那样,我也尝试创建一个单独的连接表来存储重复事件。
目前,我只能查询适用于 FullCalendar 的 Event 对象。但是,Associations 或EventOccurrence对象没有使用这个显示:
@events = Event.all.includes(:event_occurrences)
这是我目前正在尝试的:
日历.js.erb
....
eventSources: [{
url: '/calendar/index'
}],
....
日历控制器.erb
def index
@events = Event.all.includes(:event_occurrences)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @events }
end
end
我会以正确的方式解决这个问题吗?我的EventOccurrence模型是否需要任何其他字段?
编辑1:
让我尽力说明我要达到的目标:
- 我有一个带有事件的日历。
- 其中一些事件是“重复”事件。
=> 对于这些重复发生的事件,我想将它们单独存储到“加入”表中,以便在查询时可以在给定月份的参数中过滤它们。(如此处所建议)。
我的模型在上面,如Event
和EventOccurrence
。它目前的工作方式是:
- 如果一个事件没有重复发生,那么它的基本事件数据将存储在
Event
模型 (:name, :start_time, :end_time
) 中。 - 如果一个事件是
:name, :start_time, :end_time
重复发生的Event
,那么它的基本信息EventOccurrence
(:event_id, :date
我从模型中省略了 (:start_time
和:end_time
)EventOccurrence
,因为我假设这将由Event
模型中的父级处理。
根据我上面提供的场景,存储和检索事件的最佳方式是什么?