2017-04-23 46 views
2

我有一个模型Shop,我想存储每个shop的开始和结束时间。如果他们每天的工作时间相同,则很容易,只有两个属性:opening_timeclosing_time。但大多数企业在不同的日子和假期都有不同的时间。有没有更有效的方法来存储店铺的时间?

因此,我必须为每个工作日添加两个属性,共计14个属性,并且可能会创建一个全新的模型Holiday,因为无法预测任何特定业务会有多少假期起飞。

它可以做到,它只是记录企业的时间似乎不必要的复杂,我不想膨胀我的模式。有谁知道更好的方法?

+0

不是一个确切的重复,而是讨论了类似的问题[这里](http://stackoverflow.com/q/1036603/5961578 )。 – moveson

回答

1

你应该有3种型号:

  1. Shop - 业务实体
  2. Slot - 含start_timeend_timeweekly_exception属于shop

    这里,weekly_exceptionrange(0..127)整数这需要请注意,此工作日该工作日有效

    如:127 means (1111111) in base-2 representation => slot valid for all 7 weekdays

  3. SlotException - 包含blocked_start_timeblocked_end_timeexception_dayis_on_leave属于店铺

    这里,exception_day是被阻止只blocked_start_timeblocked_end_time定时之间用于哪个插槽日期。 和is_on_leave是布尔型照顾插槽假期。

Ruby代码拿到平日出weekly_exception的:

def get_weekdays(weekly_exception) 
    i, count = 1, 0 
    map, weekdays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], [] 
    while count < 7 
    weekdays.push(map[count]) if (weekly_exception & i) > 0 
    i = i << 1 
    count += 1 
    end 
    return weekdays 
end 
+0

这真的很聪明。你怎么能让Rails解释weekly_exception范围? –

+0

weekly_exception是数据库中的整数,我们将根据需要处理整数以获得week_days等。 – aqfaridi

相关问题