我正在做一个项目,有CUE模型,可以访问和搜索多个角色,如客人和管理员.基于能力类中编写的一些逻辑,使用CanCanCan gem进行授权.当搜索发生时,使用Pagy/MeiliSearch组合来进行全文搜索和分页.我现在面临的问题是,当我作为客人搜索时,我可以看到客人应该看到的正确项目,当我作为管理员搜索时,我可以看到管理员应该看到的正确项目,但Pagy gem计数是错误的.这是我的代码:
class SearchesController < ApplicationController
INCLUDES = %i[medium speakers].freeze
include Pagy::Backend
authorize_resource class: false
def search
filter = ''
filter = "speaker_ids IN [#{params[:speaker]}]" if params[:speaker].present?
search_results = Cue.accessible_by(current_ability).includes(INCLUDES).pagy_search(params[:query], filter:)
@pagy, @search_results = pagy_meilisearch(search_results)
end
end
如果有一些访客无法访问的提示,搜索将不会在@search_results
中返回它们,但@pagy
对象会将它们计入.这向用户显示不正确的计数,并且还显示少于所需的Pagy::DEFAULT[:items]
.我试了很多办法,但都没有成功.我能想到的唯一事情(我不想走这条路)是将过滤逻辑本身添加到filter
字符串中,并将所需的参数添加到索引中.但这会很复杂,而且会增加索引的大小.你有什么 idea 吗?