1

我有以下用于使用 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:

让我尽力说明我要达到的目标:

  1. 我有一个带有事件的日历。
  2. 其中一些事件是“重复”事件。
    => 对于这些重复发生的事件,我想将它们单独存储到“加入”表中,以便在查询时可以在给定月份的参数中过滤它们。(如此处所建议

我的模型在上面,如EventEventOccurrence。它目前的工作方式是:

  1. 如果一个事件没有重复发生,那么它的基本事件数据将存储在Event模型 ( :name, :start_time, :end_time) 中。
  2. 如果一个事件:name, :start_time, :end_time重复发生的Event,那么它的基本信息EventOccurrence:event_id, :date我从模型中省略了 (:start_time:end_time) EventOccurrence,因为我假设这将由Event模型中的父级处理。

根据我上面提供的场景,存储和检索事件的最佳方式是什么?

4

2 回答 2

2

好的,所以我想出了我需要做什么。通过对我的模型进行一些更改,我想出了:

 --- !ruby/object:Event
   attributes:
   id: 
   name: 
   details: 
   location: 
   etc...

 --- !ruby/object:EventOccurrence
   attributes:
   id: 
   event_id:  
   start_time: 
   end_time:

然后,对于 FullCalendar 喜欢的 JSON:

def index
@events = Event.all
@hash = []
@events.each do |e|
    @occurrences = e.event_occurrences
    @occurrences.each do |occurrence|
        @hash << {
          :id => e.id,
          :title => e.name,
          :location => e.location,
          :details => e.details,
          :start => occurrence.start_time.rfc822,
          :end => occurrence.end_time.rfc822,
        }
    end
end

   respond_to do |format|
     format.html # index.html.erb
     format.json { render json: @hash }
   end
end

这让我所有的事件都能正确显示。

于 2014-02-02T00:57:44.163 回答
1
def index
  @events = Event.all

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @events.to_json(include: :event_occurrences) }
  end
end
于 2014-01-31T16:31:56.043 回答