사용자 정보 조회 방법 문의

독립적으로 정의한 사용자 필드에서 사용자를 검색하는 플러그인으로 폼을 만들었습니다.

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에서 사용자를 가져오는 것이 필요하다고 생각하지만, 더 빠르게 만드는 방법에 대한 제안을 받으면 좋겠습니다.

 User.find_by_sql("select * from users where id in (#{user_ids.join(',')})")

감사합니다. 해결될 것 같습니다.

그럼 그게 전부였나요? 이렇게 하는 것도 좋습니다:

user_ids=user_data.pluck(:UserID)

감사합니다!
Ruby에 익숙하지 않아서 처음에는 지저분한 코드로 구현했지만, 제시해 주신 방식으로 개선해 보겠습니다!