Consultazione su come ottenere informazioni sull'utente

Ho creato un form come plugin che cerca un utente da un campo utente che ho definito in modo indipendente.

Ho utilizzato la Web API per memorizzare le informazioni dell’utente in un database esterno (AWS DynamoDB) ed estrarre i dati da esso per la ricerca.

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

Il codice sopra recupera tutti gli utenti quando la pagina viene aperta e li passa ad Angular.

Questo funziona bene, ma la risposta richiede 3500 millisecondi, il che non è molto desiderabile. (circa 1400 utenti cercati).

Penso che il problema sia che sto eseguendo User.find(user_data[‘UserID’]) in un ciclo, ma non riesco a trovare un modo per migliorarlo.

Vorrei visualizzare le schede utente, quindi penso che sia necessario acquisire gli utenti su Ruby, ma sarei felice di ricevere suggerimenti su come renderlo più veloce.

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

Grazie. Sembra che verrà risolto.

1 Mi Piace

Quindi è stato abbastanza? Potresti anche fare qualcosa come

user_ids=user_data.pluck(:UserID)
2 Mi Piace

Grazie!
Non avevo familiarità con Ruby, quindi l’ho risolto con codice sporco, ma cercherò di migliorarlo nel modo in cui lo stai presentando!

1 Mi Piace