Я пытаюсь сохранить дату и время в событиях в MongoDB с помощью Mongoid. Сложность в том, что я хочу сохранить их для разных часовых поясов (например, Берлина и Лондона). Я хочу, чтобы пользователь (админ) видел реальное время в часовом поясе, чтобы ему не нужно было считать. После этого у меня всегда есть задание cron, которое каждую минуту ищет событие для обработки.
У меня есть следующие параметры:
application.rb (я пробовал без -> стандартное UTC -> в Лондоне все в порядке, в Берлине неправильный час)
config.time_zone = 'Berlin' # as the server stays in Germany
mongoid.yml (пробовал все комбинации, но нужно использовать use_activesupport_time_zone, чтобы получить правильное время в oDB)
use_activesupport_time_zone: true
use_utc: false
schedule.rb (пока проблем нет)
every 1.minutes do
runner "Event.activate_due", environment: 'development'
end
event.rb (не уверен, какое время я сейчас смотрю)
def self.activate_due
events_due = Event.where(:eventStart.lte => (Time.now + 1.minute), :eventStart.gte => (Time.now))
events_due.each do |e|
e.activate
end
end
Я попытался изменить Time.zone в событиях # new, чтобы отобразить фактическое время часового пояса в простой_форме. Кажется, это работает, но затем метод создания контроллера, кажется, снова обрабатывает параметры как стандартный часовой пояс и неправильно преобразует его (+-1 час при экспериментировании с Лондоном/Берлином). Я пробовал почти все комбинации параметров, а также Time.now/Time.zone.now. В event#index я переключаюсь между часовыми поясами, чтобы показать правильное время.
Немного усложняю: я сохраняю часовой пояс в модели области, которая связана через areaId с моделью событий.
Как мне показать администратору в форме правильное время для события в зоне, которую он хочет добавить (не его часовой пояс), и правильно сохранить его в Mongo, чтобы позже вызвать его через cronjob?