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.
61 lines
1.4 KiB
61 lines
1.4 KiB
module Searchable::Shixun
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
searchkick language: 'chinese', callbacks: :async
|
|
|
|
scope :search_import, -> { includes(:shixun_info, :challenges, :challenge_tags, :users, user: { user_extension: :school }) }
|
|
end
|
|
|
|
def searchable_title
|
|
name
|
|
end
|
|
|
|
def search_data
|
|
{
|
|
name: name,
|
|
description: Util.extract_content(description)[0..Searchable::MAXIMUM_LENGTH]
|
|
}.merge!(searchable_user_data)
|
|
.merge!(searchable_challenge_data)
|
|
end
|
|
|
|
def searchable_user_data
|
|
{
|
|
author_name: user&.real_name,
|
|
author_school_name: user&.school_name,
|
|
}
|
|
end
|
|
|
|
def searchable_challenge_data
|
|
challenge_names = Util.map_or_pluck(challenges, :subject)
|
|
.each_with_index.map { |subject, index| "第#{index + 1}关 #{subject}" }
|
|
|
|
{
|
|
challenge_names: challenge_names.join(' '),
|
|
challenge_tag_names: Util.map_or_pluck(challenge_tags, :name).uniq.join(' ')
|
|
}
|
|
end
|
|
|
|
def should_index?
|
|
status == 2 # published
|
|
end
|
|
|
|
def to_searchable_json
|
|
{
|
|
id: id,
|
|
identifier: identifier,
|
|
author_name: user.real_name,
|
|
author_school_name: user.school_name,
|
|
visits_count: visits,
|
|
challenges_count: challenges_count,
|
|
study_count: myshixuns_count
|
|
}
|
|
end
|
|
|
|
module ClassMethods
|
|
def searchable_includes
|
|
{ user: { user_extension: :school } }
|
|
end
|
|
end
|
|
end
|