mirror of
https://github.com/Retrospring/retrospring.git
synced 2025-03-24 05:07:47 +01:00
this commit is an attempt at building a search functionality using only the stuff provided by postgresql it is, unfortunately, painfully slow: PgSearch::Document Load (7869.1ms) SELECT "pg_search_documents".* FROM "pg_search_documents" INNER JOIN (SELECT "pg_search_documents"."id" AS pg_search_id, (ts_rank((to_tsvector('simple', coalesce("pg_search_documents"."content"::text, ''))), (to_tsquery('simple', ''' ' || 'awoo' || ' ''')), 0)) AS rank FROM "pg_search_documents" WHERE ((to_tsvector('simple', coalesce("pg_search_documents"."content"::text, ''))) @@ (to_tsquery('simple', ''' ' || 'awoo' || ' ''')))) AS pg_search_ce9b9dd18c5c0023f2116f ON "pg_search_documents"."id" = pg_search_ce9b9dd18c5c0023f2116f.pg_search_id ORDER BY pg_search_ce9b9dd18c5c0023f2116f.rank DESC, "pg_search_documents"."id" ASC LIMIT $1 [["LIMIT", 10]]
40 lines
1 KiB
Ruby
40 lines
1 KiB
Ruby
class Question < ApplicationRecord
|
|
include Question::AnswerMethods
|
|
|
|
include PgSearch::Model
|
|
multisearchable against: [:content]
|
|
|
|
belongs_to :user, optional: true
|
|
has_many :answers, dependent: :destroy
|
|
has_many :inboxes, dependent: :destroy
|
|
|
|
validates :content, length: { minimum: 1 }
|
|
|
|
SHORT_QUESTION_MAX_LENGTH = 512
|
|
|
|
before_destroy do
|
|
rep = Report.where(target_id: self.id, type: 'Reports::Question')
|
|
rep.each do |r|
|
|
unless r.nil?
|
|
r.deleted = true
|
|
r.save
|
|
end
|
|
end
|
|
|
|
# rubocop:disable Rails/SkipsModelValidations
|
|
user&.decrement! :asked_count unless author_is_anonymous || direct
|
|
# rubocop:enable Rails/SkipsModelValidations
|
|
end
|
|
|
|
def can_be_removed?
|
|
return false if self.answers.count > 0
|
|
return false if Inbox.where(question: self).count > 1
|
|
true
|
|
end
|
|
|
|
def generated? = %w[justask retrospring_exporter].include?(author_identifier)
|
|
|
|
def anonymous? = author_is_anonymous && author_identifier.present?
|
|
|
|
def long? = content.length > SHORT_QUESTION_MAX_LENGTH
|
|
end
|