名前でユーザーを検索する方法(ページネーション付き)

Discourseをコアとして使用するフロントエンドアプリケーションがあり、ユーザー検索を実装してページネーションを実装したいと考えています。

現在、この API(/search?q=name)が type_filter: user をサポートしていないようです。これを実装する方法についてご存知でしょうか?

これは私たちが行った回避策です。

  1. search_controller.rb を開き、以下の行を追加します。
def show
    @search_term = params.permit(:q)[:q]

    // type_filter をクエリパラメータから許可
    @type_filter = params.permit(:type_filter)[:type_filter] || 'topic'

   ...
  1. search.rboffset を追加します。
  // 約 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) // この行
      .limit(limit)

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

これで、/search?q=name&type_filter=user&page=1 のようにしてユーザーを検索できるようになります。デフォルトでは 50 件のユーザーを取得し、page パラメータを使ってさらに多くの結果を取得できます。

お役に立てれば幸いです!:grin:

「いいね!」 3

素晴らしいアイデアですね!Discourse APIとも連携しており、検索APIを使用しようとした際にも同様の問題に遭遇しました。お手伝いできます。

「いいね!」 3