From 7b47eab0d8f174be7e8ca1a56c0f4b1ef5fd0ed4 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Tue, 29 Mar 2022 13:31:31 +0300 Subject: [PATCH] Add missing partial and wildcard search on `/admin/contact_versions` --- .../admin/contact_versions_controller.rb | 30 +++++++------------ app/services/partial_search_formatter.rb | 3 +- app/views/admin/contact_versions/index.haml | 6 ++-- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index 8ded131c0..c53a020ee 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -7,23 +7,9 @@ module Admin def index params[:q] ||= {} - search_params = params[:q].deep_dup.except(:created_at_gteq, :created_at_lteq) - - where_s = '1=1' - - search_params.each do |key, value| - next if value.empty? - - where_s += case key - when 'event' - " AND event = '#{value}'" - else - create_where_string(key, value) - end - end - - versions = Version::ContactVersion.includes(:item).where(where_s).order(created_at: :desc, id: :desc) - @q = versions.ransack(params[:q]) + search_params = PartialSearchFormatter.format(params[:q]) + versions = Version::ContactVersion.includes(:item).order(created_at: :desc, id: :desc) + @q = versions.ransack(polymorphic_association(search_params)) @versions = @q.result.page(params[:page]) @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? @@ -53,8 +39,14 @@ module Admin render json: Version::ContactVersion.search_by_query(params[:q]) end - def create_where_string(key, value) - " AND object->>'#{key}' ~* '#{value}'" + private + + def polymorphic_association(search_params) + record_type = {} + fields = %w[name code ident] + fields.each { |field| record_type[:"item_of_Contact_type_#{field}_matches"] = search_params[:"#{field}_matches"] } + + record_type end end end diff --git a/app/services/partial_search_formatter.rb b/app/services/partial_search_formatter.rb index c65184d08..af0c7978d 100644 --- a/app/services/partial_search_formatter.rb +++ b/app/services/partial_search_formatter.rb @@ -1,12 +1,11 @@ class PartialSearchFormatter def self.format(params) - percentage = '%' search_params = params.deep_dup search_params.each do |key, value| next unless key.include?('matches') && value.present? - value << percentage + value << '%' end search_params diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml index 4d7a9948d..581402197 100644 --- a/app/views/admin/contact_versions/index.haml +++ b/app/views/admin/contact_versions/index.haml @@ -7,15 +7,15 @@ .col-md-3 .form-group = f.label :name - = f.search_field :name, value: params[:q][:name], class: 'form-control', placeholder: t(:name) + = f.search_field :name_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name) .col-md-3 .form-group = f.label :id - = f.search_field :code, value: params[:q][:code], class: 'form-control', placeholder: t(:id) + = f.search_field :code_matches, value: params[:q][:code_matches], class: 'form-control', placeholder: t(:id) .col-md-3 .form-group = f.label :ident - = f.search_field :ident, value: params[:q][:ident], class: 'form-control', placeholder: t(:ident) + = f.search_field :ident_matches, value: params[:q][:ident_matches], class: 'form-control', placeholder: t(:ident) .col-md-3 .form-group = label_tag :action