Возможно ли массовое чтение из redis вне блока индекса в Ruby ActiveAdmin? - PullRequest
1 голос
/ 26 февраля 2020

У меня есть код в блоке index, где, если в классе есть X пользователей, индексный цикл повторяется X раз.

В блоке index я звоню в Redis, чтобы прочитать значение. Таким образом, это будет X звонки в Redis.

  1. Есть ли способ сделать массовый вызов Redis, где мы можем передать идентификаторы пользователей X в виде массива? (Скажите GetBulkUserNames(<Array_Of_X_Users_Ids>)). Если да, то как это сделать? Должно ли это go в методе или оно может находиться где-нибудь за пределами блока index?

  2. Как мы можем получить идентификатор пользователя X в пределах ActiveAdmin.register, чтобы мы могли передать его до GetBulkUserNames()?

1 Ответ

1 голос
/ 27 февраля 2020

Вы можете добавить связанные с коллекцией помощники в контроллере. Предполагая, что каждый X в коллекции имеет один user_id, может быть, что-то вроде этого?

controller do
  def cached_user_data
    @data ||= begin
      user_ids = collection.map(&:user_id).uniq
      Hash[user_ids.zip Redis.current.mget(user_ids)]
    end
  end
end

index do
  column :cached_user_data { |x| controller.cached_user_data[x.user_id] }
end
...