1

用户可以创建多天事件。

因此,一个事件可以有多个日期,包括日期的开始时间和结束时间。

所以一个事件可能有这些日期:

2013 年 7 月 1 日上午 9:00 - 下午 5:00 2013 年 7 月 2 日上午 10:00 - 下午 6:00 2013 年 7 月 7 日下午 1:00 - 下午 5:30

因此,事件表将存储事件 ID、事件名称、事件类型、事件举行地点的地址字段等。但是如何为事件的多个日期建模?我可以有一个单独的 event_dates 表,并且该表对于每个事件都有多行:

id event_date event_start_time event_end_time event1 2013 年 7 月 1 日上午 9:00 下午 5:00 event1 2013 年 7 月 2 日上午 10:00 下午 6:00 event1 2013 年 7 月 7 日下午 1:00 下午 5:30

但我也想查询一天发生的事件(不考虑时间),这样用户就可以在他们的区域中找到特定日期发生的事件(他们当天可能会访问多个事件)。

那么我将如何建模呢?我会使用 has_and_belongs_to_many,其中一个事件有多个日期,一个日期有多个事件?

在视图中,保存事件时,我想我需要将事件数据保存到事件表中,同时将日期/时间组合保存到另一个表中。但是要将日期/时间组合保存到另一个表,我需要刚刚保存的事件的 id。因此,在一种形式中,我有一个依赖项,即第一次保存必须成功(保存事件),才能进行第二次保存(使用新事件 ID 保存日期/时间)。

提前感谢您的帮助。

4

2 回答 2

0

我建议你设置Event有很多Sessions. 然后每个会话可以指定该会话的日期/时间范围。

至于查询特定的一天,您可以像这样使用连接和一点 Rails 魔法:(假设 rails 3.2)

class Event
  has_many :sessions

  def self.on_day(date)
    joins(:sessions).where("session.start < ? AND session.end > ?", date.end_of_day, date.beginning_of_day)
  end
于 2013-06-16T15:40:37.557 回答
-1

看看closure_tree gem(https://github.com/mceachen/closure_tree),它允许你使用acts_as_tree和你的事件的层次结构......干杯

于 2013-06-16T15:40:44.330 回答