作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在创建一个 Rails 应用程序,用于存储企业的营业时间和营业时间。最初,我想简单地使用文本数据类型并让它成为自由格式:
"Monday to Friday 9am to 5pm
Saturday 11am to 4pm
Closed Sundays"
但是,要求已更改,我需要根据当前日期和时间检查小时数,并在 View 中显示“打开”或“关闭”。比如:
class Business < ActiveRecord::Base
def open?
# Something like ...
Time.now > open_time && Time.now < close_time
end
end
那么,在存储一周中每一天的小时数方面,解决这个问题的最佳方法是什么?业务是否应该简单地 has_many :open_blocks (或其他)有开放和关闭时间?我应该将日期存储为字符串吗?
最佳答案
我目前正在为客户设置目录列表,我们希望为用户提供更大的灵 active 。所以:让用户设置几天的 block :
我们有天(1-7 的整数)、开门(时间)、关门(时间),一些商店或景点有夏季和冬季开放时间,或者他们休假。根据schema.org您必须添加一个 valid_from(日期时间)和一个 valid_through(日期时间)。
通过此设置,用户可以创建他想要的任何内容:
# migration
class CreateOpeningHours < ActiveRecord::Migration
def change
create_table :opening_hours do |t|
t.integer :entry_id # your model reference
t.integer :day
t.time :closes
t.time :opens
t.datetime :valid_from
t.datetime :valid_through
end
end
end
模型示例:
class OpeningHour < ActiveRecord::Base
belongs_to :entry
validates_presence_of :day, :closes, :opens, :entry_id
validates_inclusion_of :day, :in => 1..7
validate :opens_before_closes
validate :valid_from_before_valid_through
# sample validation for better user feedback
validates_uniqueness_of :opens, scope: [:entry_id, :day]
validates_uniqueness_of :closes, scope: [:entry_id, :day]
protected
def opens_before_closes
errors.add(:closes, I18n.t('errors.opens_before_closes')) if opens && closes && opens >= closes
end
def valid_from_before_valid_through
errors.add(:valid_through, I18n.t('errors.valid_from_before_valid_through')) if valid_from && valid_through && valid_from >= valid_through
end
end
使用该设置,您可以轻松创建一个 is_open?模型中的方法。目前我没有设置is_open?方法,但如果有人需要,请给我一个机会!我想我会在接下来的几天内完成它。
关于mysql - 您将如何在 Rails 应用程序的数据库/模型中存储营业时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349021/
我是一名优秀的程序员,十分优秀!