sql >> Databasteknik >  >> RDS >> Mysql

Hur skulle du lagra ett företags timmar i db/modellen av en Rails-app?

Jag håller för närvarande på att skapa en kataloglista för en klient och vi vill ge användaren mer flexibilitet. Så:Låt användaren ställa in block i dagar:

Vi har en dag (heltal 1-7), öppnas (tid), stänger (tid) och vissa butiker eller sevärdheter har öppettider sommar och vinter, eller så gör de semester. Enligt schema.org du måste lägga till en valid_from (datetime) och en valid_through (datetime).

Med denna inställning kan användaren skapa vad han vill:

# 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

Exempel för modellen:

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

Med den inställningen kan du enkelt skapa en is_open? metod i din modell. För närvarande har jag inte ställt in is_open? metod, men om någon behöver, ge mig en träff! Jag tror att jag kommer att avsluta det inom de närmaste dagarna.



  1. Infoga i databasen (mysql) med Ajax och PHP

  2. 15 Grundläggande MySQL-intervjufrågor för databasadministratörer

  3. Utlösare för att förhindra infogning för dubbletter av data i två kolumner

  4. SQLAlchemy:filtrering på värden lagrade i kapslad lista i JSONB-fältet