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]
// type_filter をクエリパラメータから許可
@type_filter = params.permit(:type_filter)[:type_filter] || 'topic'
...
search.rb に offset を追加します。 // 約 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 パラメータを使ってさらに多くの結果を取得できます。
お役に立てれば幸いです!![]()
素晴らしいアイデアですね!Discourse APIとも連携しており、検索APIを使用しようとした際にも同様の問題に遭遇しました。お手伝いできます。