class SubjectSearchService < ApplicationService include ElasticsearchAble attr_reader :params def initialize(params) @params = params end def call # 全部实训/我的实训 type = params[:type] || "all" if type == "mine" @subjects = User.current.subjects.visible.unhidden else @subjects = Subject.visible.unhidden end Subject.search(keyword, search_options) end private def search_options model_options = { includes: [ user: { user_extension: :school } ] } model_options.merge!(where: { id: @subjects.pluck(:id) }) model_options.merge!(order: {sort_type => sort_str}) model_options.merge!(default_options) model_options end def sort_str params[:order] || "desc" end def sort_type params[:sort] || "myshixuns_count" end end