Один из самых популярных вариантов - использовать драгоценный камень request_store
, который позволяет вам получить доступ к глобальному магазину из любой части вашего кода. Он использует Thread.current
для хранения ваших данных и заботится об очистке данных после каждого запроса.
RequestStore[:items] = []
Имейте в виду, что, поскольку он использует Thread.current
, он не будет работать должным образом в многопоточной среде, где у вас более одного потока на запрос.
Чтобы обойти эту проблему, я реализовал хранилище, которое можно разделить между потоками для одного и того же запроса. Он называется request_store_rails
, он ориентирован на многопотоковое исполнение и очень похож:
RequestLocals[:items] = []