class SubjectSearchService < ApplicationService include ElasticsearchAble attr_reader :params, :laboratory def initialize(params, laboratory) @params = params @laboratory = laboratory end def call # 全部实训/我的实训 type = params[:type] || "all" @subjects = laboratory.subjects if type == "mine" @subjects = @subjects.where(id: User.current.subjects).visible.unhidden else if User.current.admin? || User.current.business? @subjects = @subjects.unhidden else @subjects = @subjects.publiced.unhidden.or(@subjects.where(id: User.current.subjects)) end 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