我有一個型號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
這個例子顯示了一週的每一天開放時間,並在車庫在聖誕節當天關閉異常。如果找不到date
的匹配列,則應用程序邏輯將優先指定OpeningTimes
並指定date
列,然後恢復爲week_day
。
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
我認爲這提供了您所追求的靈活性。
你可以使用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
從模型的角度來看,去簡單:
has_many opening_times
from
時間和until
時間(從早上6點等至20:00)只要重複,就像在某些日子想重複時間一樣,也可以使用複選框 - 例如,您可以有一個時間段(例如,上午6點 - 晚上8點),並在您想要應用該時段的日子旁邊有複選框。這不僅僅是後端的事情,而是UX的事情。
'OpeningTime'模型也是我的想法,正如你所說我主要關注UX的事情。但是,一間車庫的開放時間是多少?每天一次,或者如果時間相同,它們應該以某種方式結合起來? – stevecross
嗯,我不能100%確定,因爲我不知道你的申請,但是看起來只有在創造開放時間時,分組時間似乎是最相關的。如果是這種情況,那麼就沒有必要額外承諾在後端將它們組合在一起。 – varatis
至於你的第一個問題,我想一個車庫會有~7個開放時間,每天〜1個。你可以使用一些Javascript或者其他的東西來幫助用戶創建重複的開放時間,但是除非需要,否則不會反映後端的組。如果需要,你可以創建一個'OpeningTimeGroup'模型,並讓車庫'has_many'。 – varatis
這看起來不錯。謝謝。 – stevecross
增加了一個'is_open?'函數的示例實現。 –