Поиск первого слова в поле с использованием filterrific - PullRequest
0 голосов
/ 23 января 2019

Я использую фильтр filterrfic для поиска организации в базе данных.Проблема, с которой я сталкиваюсь, заключается в том, что, когда я ищу организацию, название которой начинается с «Националь», я получаю список всех организаций, в названии которых есть «Националь».Все, что я хочу, это чтобы он просто искал первое слово в поле name_of_organisation.

organisation.rb

def self.search(search)
    if search
        where('name_of_organisation LIKE ?', "%#{search}%")
    else
        all
    end
end


filterrific(
available_filters: [
        :search_query           
 ]
)

 scope :search_query, lambda { |query|
    return nil  if query.blank?

    terms = query.downcase.split(/\s+/)

    terms = terms.map { |e|
        (e.gsub('*', '%') + '%').gsub(/%+/, '%')
    }

    num_or_conds = 1
     where(
        terms.map { |term|
            "(LOWER(organisations.name_of_organisation) LIKE ?) 
        }.join(' AND '),
        *terms.map { |e| [e] * num_or_conds }.flatten
    )
}

В настоящее время он отображает всю Организацию следующим образом:Serivce

Но я хочу, чтобы он выполнял поиск только по первому слову поля name_of_organisation и отображал только социальную службу Nation

1 Ответ

0 голосов
/ 23 января 2019

Попробуйте изменить эту строку:

where('name_of_organisation LIKE ?', "%#{search}%")

на:

where('name_of_organisation LIKE ?', "#{search}%")

Обратите внимание на удаление первого % в строке поиска.В этом случае % представляет любую последовательность из 0 или более символов .Удаляя первый, он должен искать только те строки, которые начинаются с указанной вами строки поиска.

...