具有多个日期的事件我使用has_and_belongs_to_many

时间:2013-06-16 15:24:00

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

用户可以创建多日活动。

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

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

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保存日期/时间)。

提前感谢您的帮助。

2 个答案:

答案 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和你的事件的层次结构...... 干杯