Во-первых, вам нужно изменить модель часов на «own_to» вместо has_one, чтобы модель часов знала, что она напрямую связана с бизнесом, к которому она привязана.Возможно, вы также захотите, чтобы столбцы open_time, close_time и day_of_week были проиндексированы вместе, чтобы вы могли быстро искать их вместе.
add_index :hours, [:day_of_week, :open_time, :close_time]
Чтобы найти открытые компании, вы можете создать областьэто будет выглядеть следующим образом.Я предполагаю, что вы используете ActiveRecord.
class Hour < ActiveRecord::Base
belongs_to :business
scope :open, lambda { |day, time| { :conditions => ["hours.day_of_week = ? AND hours.open_time >= ? AND hours.close_time < ?", day, time, time] } }
end
Этот способ найти открытые предприятия, которые вам просто нужно сделать:
Hour.open.includes(:business)
И каждый из предприятий, которые открытыбудут там прикреплены к своей модели часов.Если вы хотите перебрать их и получить доступ к информации о компании, вы можете сделать:
Hour.open.includes(:business).each do |hour|
puts "#{hour.business.name} is open! It closes at #{hour.close_time}."
end