페이지네이션을 사용하여 이름으로 사용자 검색하는 방법

Discourse를 코어로 사용하는 프론트엔드 애플리케이션을 보유하고 있으며, 페이지네이션을 갖춘 사용자 검색 기능을 구현하려고 합니다.

현재 이 API(/search?q=name)가 type_filter: user를 지원하지 않는 것으로 보입니다. 이 기능을 구현하는 방법에 대한 아이디어가 있으신가요?

우리가 적용한 임시 해결 방법입니다.

  1. search_controller.rb 파일을 열고 아래 라인을 추가하세요.
def show
    @search_term = params.permit(:q)[:q]

    // allow type_filter from query params
    @type_filter = params.permit(:type_filter)[:type_filter] || 'topic'

   ...
  1. search.rb 파일에 offset을 추가하세요.
  // it is around line 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) // this line
      .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개의 좋아요