Make rich_text searchable and renderable in pdf

This commit is contained in:
david 2024-07-21 01:41:08 +02:00
parent 6d3a269231
commit 879670983d
6 changed files with 26 additions and 5 deletions

View file

@ -0,0 +1,8 @@
module PdfHelper
def prepare_rich_text(rich_text)
%w[div p del blockquote pre code].each do |tag|
rich_text = rich_text.to_s.gsub(%r{<#{tag}.*?>|</#{tag}>}, '')
end
rich_text
end
end

View file

@ -0,0 +1,7 @@
module ActionText
class RichText < Record
before_save do
self.body_text = body.to_plain_text
end
end
end

View file

@ -6,6 +6,6 @@ class Check < ApplicationRecord
has_rich_text :success_criterion_html
scope :search, lambda { |term|
joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = checks.id AND record_type = 'Check'").where('checks.name LIKE :term OR action_text_rich_texts.body LIKE :term', term: "%#{term}%")
joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = checks.id AND record_type = 'Check'").where('checks.name LIKE :term OR action_text_rich_texts.body_text LIKE :term', term: "%#{term}%")
}
end

View file

@ -3,12 +3,12 @@ prawn_document do |pdf|
@report.elements.each do |element|
pdf.text element.title
pdf.text element.path
pdf.text element.description_html, inline_format: true
pdf.text prepare_rich_text(element.description_html), inline_format: true
element.success_criteria.each do |success_criterion|
pdf.text success_criterion.title
pdf.text success_criterion.description_html, inline_format: true
pdf.text success_criterion.comment_html, inline_format: true
pdf.text prepare_rich_text(success_criterion.description_html), inline_format: true
pdf.text prepare_rich_text(success_criterion.comment_html), inline_format: true
end
end
end

View file

@ -0,0 +1,5 @@
class AddBodyTextToActionTextRichTexts < ActiveRecord::Migration[7.1]
def change
add_column :action_text_rich_texts, :body_text, :text
end
end

3
db/schema.rb generated
View file

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2024_07_16_182333) do
ActiveRecord::Schema[7.1].define(version: 2024_07_20_231941) do
create_table "action_text_rich_texts", force: :cascade do |t|
t.string "name", null: false
t.text "body"
@ -18,6 +18,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_07_16_182333) do
t.bigint "record_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.text "body_text"
t.index ["record_type", "record_id", "name"], name: "index_action_text_rich_texts_uniqueness", unique: true
end