Come cercare utente per nome con paginazione

Abbiamo un’applicazione frontend che utilizza Discourse come core e vogliamo implementare la ricerca degli utenti con paginazione.

Attualmente, non vedo che questa API (/search?q=name) supporti type_filter: user. Avete qualche idea su come implementarla?

Questa è una soluzione temporanea che abbiamo implementato.

  1. Apri search_controller.rb e aggiungi questa riga.
def show
    @search_term = params.permit(:q)[:q]

    // consenti type_filter dai parametri della query
    @type_filter = params.permit(:type_filter)[:type_filter] || 'topic'

   ...
  1. Aggiungi offset a search.rb
  // si trova intorno alla riga 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) // questa riga
      .limit(limit)

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

In questo modo potrai cercare gli utenti tramite /search?q=name&type_filter=user&page=1; per impostazione predefinita verranno recuperati 50 utenti e potrai usarne di più tramite il parametro page.

Speriamo che questo ti sia utile! :grin:

3 Mi Piace

Ottima idea! Lavoriamo anche con l’API di Discourse e quando abbiamo provato a utilizzare l’API di ricerca, abbiamo riscontrato lo stesso problema. Posso aiutarti a risolverlo.

3 Mi Piace