J’ai créé un formulaire sous forme de plugin qui recherche un utilisateur à partir d’un champ utilisateur que j’ai défini indépendamment.
J’ai utilisé l’API Web pour stocker les informations utilisateur dans une base de données externe (AWS DynamoDB) et en extraire des données pour la recherche.
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
Le code ci-dessus récupère tous les utilisateurs lorsque la page est ouverte et les transmet à Angular.
Cela fonctionne bien, mais la réponse prend 3500 millisecondes, ce qui n’est pas très souhaitable. (environ 1400 utilisateurs recherchés).
Je pense que le problème est que j’utilise User.find(user_data['UserID']) dans une boucle, mais je ne trouve pas de moyen de l’améliorer.
Je voudrais afficher des cartes d’utilisateur, donc je pense qu’il est nécessaire d’acquérir les utilisateurs sur Ruby, mais je serais heureux d’obtenir des suggestions sur la façon de le rendre plus rapide.