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