Задать вопрос
@WonderMetal

Как правильней сделать рефакторинг?

class Reservation < ActiveRecord::Base

  validates :table, presence: true
  validates :start, presence: true
  validates :finish, presence: true


  validate :checking_the_time, :uniqueness_reservation

  scope :tables, ->(table) { where("'reservations'.'table' = ? ", table) }

 
  def checking_the_time
    if start >= finish
      errors.add(:finish, "Invalid time range")
    end
  end

  def uniqueness_reservation
    unless Reservation.diapazone(start, finish).tables(table).where.not(id: id).empty?
      errors.add(:booked_from, 'Invalid period.')
    end
  end


  private

  def self.diapazone(start, finish)
    where("(start >= :s AND finish <= :f) OR (start <= :s AND finish >= :s)
             OR (start <= :f AND finish >= :f)",
          {s: start, f: finish})
  end


end


помогите с рефакторингом валидации uniqueness_reservation, валидация на то что б новый заказ никак не пересекался с существующим
  • Вопрос задан
  • 2419 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
viktorvsk
@viktorvsk
Вообще, программирование уже давно не в машинных кодах производится. Немного бизнес-логики не помешало б. Что такое tables? Вы сдаете квартиру и проверяете, что б в одном временном интервале был только один заказ?
Тогда все проще
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
OTKLIK POWER Москва
от 80 000 до 150 000 ₽
от 6 000 до 8 000 $
Netwrk Буэнос-Айрес
от 5 000 до 7 500 $