You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/app/services/subject_search_service.rb

48 lines
1.1 KiB

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