用户可以创建多日活动。
因此,事件可以有多个日期,包括日期的开始时间和结束时间。
所以一个事件可能有这些日期:
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 pm 5:30
但我还想查询一天发生的事件(无论时间如何),这样用户就可以在某些日子里找到他们所在区域发生的事件(他们可能会在当天访问多个事件)。
那么我该如何建模呢?我会使用has_and_belongs_to_many,其中一个事件有多个日期,一个日期有多个事件?
在视图中,保存事件时,我想我需要将事件数据保存到事件表中,并将日期/时间组合保存到另一个表中。但是为了将日期/时间组合保存到另一个表,我需要刚刚保存的事件的id。因此,在一种形式中,我有一个依赖项,第一次保存必须成功(保存事件),第二次保存继续(使用新事件ID保存日期/时间)。
提前感谢您的帮助。
答案 0 :(得分:0)
我建议您将Event
设置为多个Sessions
。然后,每个会话可以指定该会话的日期/时间范围。
就查询特定日期而言,你可以使用一个连接和一个小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
答案 1 :(得分:-1)
看一下closure_tree gem(https://github.com/mceachen/closure_tree),它允许你使用acts_as_tree和你的事件的层次结构...... 干杯