ruby-on-rails - 使用 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
解决方案
尝试更改此行:
where('name_of_organisation LIKE ?', "%#{search}%")
到:
where('name_of_organisation LIKE ?', "#{search}%")
请注意删除%
了搜索字符串中的第一个。在这种情况下,%
表示0 个或多个字符的任何序列。通过删除第一个,它应该只搜索以您提供的搜索字符串开头的字符串。
推荐阅读
- javascript - 单击时将按钮值添加到数据
- r - x行的滑动数据集R
- laravel - 断言 Laravel 命令在测试中被调用
- c# - 将文件上传到服务器时出现“System.Web.HttpException”类型的异常
- laravel - htmlspecialchars() 期望参数 1 是字符串,我的代码中给出的对象
- c - 在 uint64 中对 38 位进行基数排序?
- protocol-buffers - 如何以 protobuf 3 格式表示 XMLGregorianCalendar
- python - Jupyter Notebook 中的 Python 3 不起作用
- c# - 无法运行 EdgeDriver 自动化测试:Azure DevOps 的 VsTest VM 在默认安装位置没有 Edge 二进制文件?
- jquery - Laravel - 删除按钮在动态输入表单中不起作用