Discourse를 코어로 사용하는 프론트엔드 애플리케이션을 보유하고 있으며, 페이지네이션을 갖춘 사용자 검색 기능을 구현하려고 합니다.
현재 이 API(/search?q=name)가 type_filter: user를 지원하지 않는 것으로 보입니다. 이 기능을 구현하는 방법에 대한 아이디어가 있으신가요?
Discourse를 코어로 사용하는 프론트엔드 애플리케이션을 보유하고 있으며, 페이지네이션을 갖춘 사용자 검색 기능을 구현하려고 합니다.
현재 이 API(/search?q=name)가 type_filter: user를 지원하지 않는 것으로 보입니다. 이 기능을 구현하는 방법에 대한 아이디어가 있으신가요?
우리가 적용한 임시 해결 방법입니다.
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'
...
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를 사용하여 더 많은 결과를 가져올 수 있습니다.
도움이 되길 바랍니다! ![]()
훌륭한 아이디어입니다! 저희도 Discourse API를 사용하고 있으며, 검색 API를 사용하려고 할 때 동일한 문제를 발견했습니다. 이 작업을 도와드릴 수 있습니다.