Ich habe ein Formular als Plugin erstellt, das nach einem Benutzer aus einem von mir unabhängig definierten Benutzerfeld sucht.
Ich habe die Web-API verwendet, um Benutzerinformationen in einer externen Datenbank (AWS DynamoDB) zu speichern und Daten daraus für die Suche zu extrahieren.
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
Der obige Code ruft alle Benutzer ab, wenn die Seite geöffnet wird, und übergibt sie an Angular.
Dies funktioniert gut, aber die Antwort dauert 3500 Millisekunden, was nicht sehr wünschenswert ist (ungefähr 1400 Suchbenutzer).
Ich denke, das Problem ist, dass ich User.find(user_data[‘UserID’]) in einer Schleife ausführe, aber ich kann mir keine bessere Lösung vorstellen.
Ich möchte Benutzerkarten anzeigen, daher denke ich, dass es notwendig ist, Benutzer in Ruby zu erwerben. Ich würde mich über Vorschläge freuen, wie dies schneller gemacht werden kann.