Ruby on rails 重构it代码模型? 类保留(table){where(“'reservations.'table'=?”,table)} def检查时间 如果开始>=结束 错误。添加(:finish,“无效时间范围”) 终止 终止 迪夫酒店预订 除非预订。双唑酮(开始,结

Ruby on rails 重构it代码模型? 类保留(table){where(“'reservations.'table'=?”,table)} def检查时间 如果开始>=结束 错误。添加(:finish,“无效时间范围”) 终止 终止 迪夫酒店预订 除非预订。双唑酮(开始,结,ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,重构it代码模型? 类保留(table){where(“'reservations.'table'=?”,table)} def检查时间 如果开始>=结束 错误。添加(:finish,“无效时间范围”) 终止 终止 迪夫酒店预订 除非预订。双唑酮(开始,结束)。表(表)。何处。不(id:id)。空? 错误。添加(:从“无效期间”预订) 终止 终止 私有的 def自洁双唑酮(开始、结束) where(“(start>=:s和finish)您想确保按照定义的顺序运行验证吗?我对这个块感兴趣,”(st

重构it代码模型?
类保留(table){where(“'reservations.'table'=?”,table)}
def检查时间
如果开始>=结束
错误。添加(:finish,“无效时间范围”)
终止
终止
迪夫酒店预订
除非预订。双唑酮(开始,结束)。表(表)。何处。不(id:id)。空?
错误。添加(:从“无效期间”预订)
终止
终止
私有的
def自洁双唑酮(开始、结束)

where(“(start>=:s和finish)您想确保按照定义的顺序运行验证吗?我对这个块感兴趣,”(start>=:s和finish)
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