Beratung, wie Benutzerinformationen erhalten werden können

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.

User.find_by_sql("select * from users where id in (#{user_ids.join(',')})")
1 „Gefällt mir“

Danke. Es sieht so aus, als ob es gelöst werden wird.

1 „Gefällt mir“

War das also genug? Sie könnten auch so etwas tun

user_ids=user_data.pluck(:UserID)
2 „Gefällt mir“

Danke!
Ich war mit Ruby nicht vertraut und habe das mit schmutzigem Code gelöst, aber ich werde versuchen, es so zu verbessern, wie du es darstellst!

1 „Gefällt mir“