Tôi hiện đang thiết lập danh sách thư mục cho một khách hàng và chúng tôi muốn cung cấp cho người dùng sự linh hoạt hơn. Vì vậy:Hãy để người dùng thiết lập các khối trong ngày:
Chúng ta có một ngày (số nguyên 1-7), mở (thời gian), đóng cửa (thời gian) và một số cửa hàng hoặc điểm tham quan có thời gian mở cửa vào mùa hè và mùa đông, hoặc họ thực hiện các kỳ nghỉ. Theo schema.org bạn phải thêm valid_from (datetime) và valid_through (datetime).
Với thiết lập này, người dùng có thể tạo bất kỳ thứ gì mình muốn:
# 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
Ví dụ cho mô hình:
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
Với thiết lập đó, bạn có thể dễ dàng tạo is_open? trong mô hình của bạn. Hiện tại tôi chưa thiết lập is_open? nhưng nếu ai đó cần, hãy cho tôi một bản hit! Tôi nghĩ tôi sẽ hoàn thành nó trong những ngày tới.