сериализация и десериализация области ActiveRecord - PullRequest
0 голосов
/ 07 сентября 2018

Мы пытаемся найти эффективный способ передачи нескольких записей в фоновое задание в Rails. Цель состоит в том, чтобы внутри работы у нас была область действия, чтобы мы могли использовать .includes и так далее. Сейчас самое лучшее, что у нас есть, - это User.active.pluck(:id) на клиенте и внутри работы User.where(id: passed_in_ids). Мне интересно, есть ли способ на самом деле сериализовать прицел и воссоздать его внутри работы.

Я мог видеть, используя User.active.to_sql на клиенте, но тогда внутри задания единственная опция, которую я вижу, это User.find_by_sql(passed_in_query), но она возвращает массив, а не область AR. Есть ли альтернативы?

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете воссоздать отношение ActiveRecord с помощью User.unscoped.from("(#{passed_in_query}) users"). Вы потеряете нетерпеливо загруженные ассоциации, но, вероятно, ответственность за их загрузку лежит на работе.

Возможно, есть более чистый способ достичь того, чего вы хотите, но трудно сказать без доступа к коду, который планирует фоновое задание. Я предполагаю, что инкапсуляция запроса, который вы сначала создали, в области, которая может быть повторно использована в задании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...