독립적으로 정의한 사용자 필드에서 사용자를 검색하는 플러그인으로 폼을 만들었습니다.
Web API를 사용하여 사용자 정보를 외부 DB(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에서 사용자를 가져오는 것이 필요하다고 생각하지만, 더 빠르게 만드는 방법에 대한 제안을 받으면 좋겠습니다.