Один из подходов состоит в том, чтобы преобразовать activation_due_date
в часовой пояс пользователя. Как вы говорите, «моя дата не зафиксирована - это зависит от местоположения пользователей».
Чтобы сделать это как область применения, проще всего использовать функции часовых поясов ваших баз данных. Это зависит от того, какую базу данных вы используете, но в PostgreSQL это будет примерно так:
where('activation_due_date AT TIME ZONE ? > NOW() ', user.timezone)
Еще проще было бы провести сравнение строк
where('to_char(activation_due_date, 'YYYYMMDDHH24MISS') > ?', Time.current.in_time_zone(user.timezone).strftime('%Y%m%d%H%M%S');
В этом случае мы говорим, какое время на стене для пользователя, и это меньше времени в базе данных (которое «хранится» в UTC).