Cómo buscar usuario por nombre con paginación

Tenemos una aplicación frontend que utiliza Discourse como núcleo y queremos implementar la búsqueda de usuarios con paginación.

Actualmente, no veo que esta API (/search?q=name) admita type_filter: user. ¿Alguna idea sobre cómo implementar esto?

Esta es una solución temporal que implementamos.

  1. Abre search_controller.rb y agrega esta línea.
def show
    @search_term = params.permit(:q)[:q]

    // permitir type_filter desde los parámetros de consulta
    @type_filter = params.permit(:type_filter)[:type_filter] || 'topic'

   ...
  1. Agrega offset a search.rb
  // está alrededor de la línea 780
  def user_search
    return if SiteSetting.hide_user_profiles_from_public && !@guardian.user

    users = User.includes(:user_search_data)
      .references(:user_search_data)
      .where(active: true)
      .where(staged: false)
      .where("user_search_data.search_data @@ #{ts_query("simple")}")
      .order("CASE WHEN username_lower = '#{@original_term.downcase}' THEN 0 ELSE 1 END")
      .order("last_posted_at DESC")
      .offset(offset) // esta línea
      .limit(limit)

    users.each do |user|
      @results.add(user)
    end
  end

Luego podrás buscar usuarios con /search?q=name&type_filter=user&page=1; por defecto se obtendrán 50 usuarios y se usará page para obtener más.

¡Espero que esto ayude! :grin:

3 Me gusta

¡Gran idea! Nosotros también trabajamos con la API de Discourse y cuando intentamos usar la API de búsqueda, nos encontramos con este problema también. Puedo ayudar a hacerlo.

3 Me gusta