我有一个Garage
应该有开放时间的模型。但开放时间应该相当灵活。例如,一周中的每一天可能有不同的时间,并且应该可以添加休息时间。但也有可能时间没有不同或只有几天不同。
现在我想知道什么是实现这一点的好方法。有任何想法吗?我现在被困了几天:(
我有一个Garage
应该有开放时间的模型。但开放时间应该相当灵活。例如,一周中的每一天可能有不同的时间,并且应该可以添加休息时间。但也有可能时间没有不同或只有几天不同。
现在我想知道什么是实现这一点的好方法。有任何想法吗?我现在被困了几天:(
我认为到目前为止的答案根本无法解决问题。只是在思考,但我可能有这样的模式(带有示例数据):
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_day
date
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
我认为这提供了您所追求的灵活性。
从模型的角度来看,简单点:
has_many opening_times
from
时间和until
时间(例如从早上 6 点到晚上 8 点)至于重复,比如如果你想在某些日子重复时间,你可以使用复选框——例如,你可以有一个时间段(例如早上 6 点到晚上 8 点)并在你想申请的日期旁边有复选框那个时间段到。这将是 UX 的事情,而不是后端的事情。
您可以使用 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