Wie man Benutzer nach Namen mit Paginierung sucht

Wir haben eine Frontend-Anwendung, die Discourse als Kern verwendet, und möchten die Benutzersuche mit Paginierung implementieren.

Derzeit sehe ich nicht, dass diese API (/search?q=name) type_filter: user unterstützt. Haben Sie eine Idee, wie man dies umsetzen kann?

Das ist eine Workaround-Lösung, die wir angewendet haben.

  1. Öffnen Sie search_controller.rb und fügen Sie diese Zeile hinzu.
def show
    @search_term = params.permit(:q)[:q]

    // erlaube type_filter aus Query-Parametern
    @type_filter = params.permit(:type_filter)[:type_filter] || 'topic'

   ...
  1. Fügen Sie offset zu search.rb hinzu.
  // das ist ungefähr Zeile 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) // diese Zeile
      .limit(limit)

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

Danach können Sie Benutzer mit /search?q=name&type_filter=user&page=1 suchen. Standardmäßig werden 50 Benutzer abgerufen, und Sie verwenden page, um weitere zu erhalten.

Hoffentlich hilft das! :grin:

3 „Gefällt mir“

Tolle Idee! Wir arbeiten ebenfalls mit der Discourse-API, und als wir versucht haben, die Such-API zu nutzen, sind wir auf dasselbe Problem gestoßen. Ich kann dabei helfen, das zu lösen.

3 „Gefällt mir“