Я создал форму в виде плагина, которая ищет пользователя в поле пользователей, которое я определил независимо.
Я использовал Web API для хранения информации о пользователях во внешней базе данных (AWS DynamoDB) и извлечения оттуда данных для поиска.
class DiscourseUserSearchController < ApplicationController
def index
end
def search
dynamodb = Aws::DynamoDB::Client.new(
access_key_id: ENV['ACCESS_KEY_ID'],
secret_access_key: ENV['SECRET_ACCESS_KEY'],
region: AWS_REGION
)
scan_condition = {
table_name: "DiscourseUserInformation"
}
result = dynamodb.scan(scan_condition)
result = result.items
Rails.logger.info result
data = result.map do |user_data|
user = User.find(user_data['UserID'])
user_data['avatar_template'] = user.avatar_template
user_data['username'] = user.username
next user_data
end
render status: 200, json: { status: 200, data: data }
end
end
Вышеуказанный код получает всех пользователей при открытии страницы и передаёт их в Angular.
Это работает нормально, но время ответа составляет 3500 миллисекунд, что не очень желательно (около 1400 искомых пользователей).
Я думаю, что проблема в том, что я вызываю User.find(user_data['UserID']) внутри цикла, но не могу придумать, как это улучшить.
Мне нужно отображать карточки пользователей, поэтому, полагаю, получение данных о пользователях на Ruby необходимо, но буду рад получить предложения, как ускорить этот процесс.