Comment rechercher un utilisateur par nom avec pagination

Nous avons une application frontend qui utilise Discourse comme cœur et nous souhaitons implémenter la recherche d’utilisateurs avec pagination.

Actuellement, je ne vois pas que cette API (/search?q=name) prenne en charge type_filter: user. Une idée sur la manière d’implémenter cela ?

Voici une solution de contournement que nous avons mise en place.

  1. Ouvrez search_controller.rb et ajoutez cette ligne.
def show
    @search_term = params.permit(:q)[:q]

    // autoriser type_filter depuis les paramètres de requête
    @type_filter = params.permit(:type_filter)[:type_filter] || 'topic'

   ...
  1. Ajoutez offset à search.rb
  // vers la ligne 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) // cette ligne
      .limit(limit)

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

Ensuite, vous pourrez rechercher des utilisateurs via /search?q=name&type_filter=user&page=1. Par défaut, cela récupère 50 utilisateurs, et vous utilisez page pour en obtenir davantage.

J’espère que cela vous aidera ! :grin:

3 « J'aime »

Bonne idée ! Nous travaillons également avec l’API Discourse et lorsque nous avons essayé d’utiliser l’API de recherche, nous avons rencontré ce problème également. Je peux aider à le faire.

3 « J'aime »