1

我有一个Garage应该有开放时间的模型。但开放时间应该相当灵活。例如,一周中的每一天可能有不同的时间,并且应该可以添加休息时间。但也有可能时间没有不同或只有几天不同。

现在我想知道什么是实现这一点的好方法。有任何想法吗?我现在被困了几天:(

4

3 回答 3

3

我认为到目前为止的答案根本无法解决问题。只是在思考,但我可能有这样的模式(带有示例数据):

id | garage_id | date       | week_day | start_time | end_time
--------------------------------------------------------------
1  |        10 |       NULL |        0 |       NULL |    NULL
2  |        10 |       NULL |        1 |      09:00 |   17:30
3  |        10 |       NULL |        2 |      09:00 |   17:30
4  |        10 |       NULL |        3 |      09:00 |   17:30
5  |        10 |       NULL |        4 |      09:00 |   17:30
6  |        10 |       NULL |        5 |      09:00 |   17:00
7  |        10 |       NULL |        6 |      11:00 |   16:00
8  |        10 | 2013-12-25 |     NULL |       NULL |    NULL

此示例显示一周中每一天的开放时间,以及车库在圣诞节关闭的例外情况。应用程序逻辑将优先OpeningTimes使用指定的列,然后如果没有找到匹配的列date,则恢复为。week_daydate

def is_open?
  if (exc = opening_times.find_by_date(Date.today))
    (exc.start_time..exc.end_time).cover?(Time.now)
  else
    tdy = opening_times.find_by_week_day(Date.today.wday)
    (tdy.start_time..tdy.end_time).cover?(Time.now)
  end
end

我认为这提供了您所追求的灵活性。

于 2013-07-08T20:54:32.133 回答
1

从模型的角度来看,简单点:

  • 车库has_many opening_times
  • 每个 OpeningTime 都有from时间和until时间(例如从早上 6 点到晚上 8 点)

至于重复,比如如果你想在某些日子重复时间,你可以使用复选框——例如,你可以有一个时间段(例如早上 6 点到晚上 8 点)并在你想申请的日期旁边有复选框那个时间段到。这将是 UX 的事情,而不是后端的事情。

于 2013-07-08T20:31:53.773 回答
0

您可以使用 mongoid 语法执行类似的操作来包含字段和类型:

class Garage
  has_many :days
end

class Day
  field :start, type: Datetime
  field :end, type: Datetime
  field :state, type: String, default: 'opened'

  belongs_to :garage

  def initialize(state, start, end)
    @state = state
    @start = start
    @end = end
  end
end
于 2013-07-08T20:30:14.950 回答