首页 > 解决方案 > 使用 filterrific 搜索字段中的第一个单词

问题描述

我正在使用 filterrfic gem 在数据库中搜索组织。我面临的问题是,当我搜索名称以 National 开头的组织时,我会得到所有名称中包含 National 的组织的列表。我想要的是它应该只搜索 name_of_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
    )
}

目前它显示的所有组织如下: National Social Service Society for National Service

但我想要的是它应该只搜索 name_of_organisation 字段的第一个单词并只显示 Nation Social Service

标签: ruby-on-railsruby-on-rails-5filterrific

解决方案


尝试更改此行:

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

到:

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

请注意删除%了搜索字符串中的第一个。在这种情况下,%表示0 个或多个字符的任何序列。通过删除第一个,它应该只搜索以您提供的搜索字符串开头的字符串。


推荐阅读