mirror of
https://github.com/rickbarrette/redmine_qbo.git
synced 2026-04-02 16:21:58 -04:00
Restored old search
This commit is contained in:
@@ -182,23 +182,9 @@ class Customer < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def self.search(search)
|
||||
return all if search.blank?
|
||||
|
||||
# 1. Clean the input: Remove existing stars and special Boolean operators
|
||||
# to prevent "red**" or syntax errors from hyphens/plus signs.
|
||||
clean_search = search.gsub(/[*+\-><()~]/, '')
|
||||
|
||||
# 2. Add a single trailing wildcard for partial matching
|
||||
ft_query = "#{clean_search}*"
|
||||
|
||||
# 3. Use the exact column list from your migration
|
||||
# Using a hybrid approach to ensure "Jonh" still finds "John"
|
||||
where(
|
||||
"MATCH(name, phone_number, mobile_phone_number) AGAINST(? IN BOOLEAN MODE) OR
|
||||
SOUNDEX(SUBSTRING_INDEX(name, ' ', 1)) = SOUNDEX(?) OR
|
||||
name LIKE ?",
|
||||
ft_query, clean_search, "%#{sanitize_sql_like(clean_search)}%"
|
||||
).order(Arel.sql("MATCH(name, phone_number, mobile_phone_number) AGAINST(#{connection.quote(clean_search)}) DESC"))
|
||||
search = sanitize_sql_like(search)
|
||||
customers = where("name LIKE ? OR phone_number LIKE ? OR mobile_phone_number LIKE ?", "%#{search}%", "%#{search}%", "%#{search}%")
|
||||
return customers.order(:name)
|
||||
end
|
||||
|
||||
# Override the defult redmine seach method to rank results by id
|
||||
|
||||
Reference in New Issue
Block a user