Consulta sobre cómo obtener información del usuario

He creado un formulario como un plugin que busca un usuario a partir de un campo de usuario que he definido de forma independiente.

Utilicé la API web para almacenar información del usuario en una base de datos externa (AWS DynamoDB) y extraer datos de ella para la búsqueda.

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

El código anterior obtiene todos los usuarios cuando se abre la página y los pasa a Angular.

Esto funciona bien, pero la respuesta tarda 3500 milisegundos, lo cual no es muy deseable. (aproximadamente 1400 usuarios buscados).

Creo que el problema es que estoy haciendo User.find(user_data[‘UserID’]) en un bucle, pero no se me ocurre una forma de mejorarlo.

Me gustaría mostrar tarjetas de usuario, por lo que creo que es necesario adquirir usuarios en Ruby, pero agradecería sugerencias sobre cómo hacerlo más rápido.

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

Gracias. Parece que se resolverá.

1 me gusta

¿Así que eso fue suficiente? También podrías hacer algo como

user_ids=user_data.pluck(:UserID)
2 Me gusta

¡Gracias!
No estaba familiarizado con Ruby, así que lo logré con código sucio, ¡pero intentaré mejorarlo de la manera que lo presentas!

1 me gusta