Если ваша таблица содержит только строку time_zone
, которая содержит действительное имя часового пояса Rails (или псевдоним), вам придется каким-то образом сгенерировать список имен часовых поясов, которые в настоящее время находятся между 8:00 и 21:00.
Для этого вы можете написать вспомогательный метод, который выбирает используемые часовые пояса в вашей таблице через Store.distinct.pluck(:time_zone)
и выбирает те из них, которые соответствуют критериям:
class Store
def self.time_zones_between(hours)
distinct.pluck(:time_zone).select do |time_zone|
Time.use_zone(time_zone) { hours.cover?(Time.current.hour) }
end
end
scope :currently_open, -> { where(time_zone: time_zones_between(8...21) }
end
Обратите внимание, что вызов Store.currently_open
приведет к двум запросам: один для получения часовых поясов и один для получения фактических результатов. Вы можете избежать первого запроса, предоставив список доступных часовых поясов самостоятельно.