sql >> Databáze >  >> RDS >> Mysql

Jak byste uložili pracovní dobu firmy v db/modelu aplikace Rails?

V současné době nastavuji výpis adresáře pro klienta a chceme uživateli poskytnout větší flexibilitu. Takže:Nechte uživatele nastavit bloky na dny:

Máme den (celé číslo 1-7), otevře se (čas), zavírá (čas) a některé obchody nebo památky mají letní a zimní otevírací dobu, nebo dělají prázdniny. Podle schema.org musíte přidat valid_from (datetime) a valid_through (datetime).

S tímto nastavením může uživatel vytvořit, co chce:

# 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

Příklad pro model:

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

S tímto nastavením můžete snadno vytvořit is_open? metoda ve vašem modelu. V současné době jsem nenastavil is_open? metoda, ale pokud někdo potřebuje, dejte mi hit! Myslím, že to dokončím v příštích dnech.



  1. Dynamický dotaz v MySQL

  2. Jak funguje current_timestamp() v PostgreSQL

  3. Převeďte skript MySQL na H2

  4. Jak mohu použít kaskádové mazání se serverem SQL?