ruby-on-rails - Ruby on Rails - 生产模式 - 搜索不是在寻找内容的第一个字母
问题描述
我的应用程序中有一个搜索页面。在开发模式下,它正在按应有的方式工作。但是当我在生产模式下尝试时,一些结果丢失了。在生产模式下,搜索不会在搜索时检查第一个字母。我认为这可能是因为我以某种方式更改了搜索词,但我检查了它并没有问题。
这是我的模型相关范围:
scope :anime_list, -> { where(category: 'anime') }
scope :manga_list, -> { where(category: 'manga') }
scope :name_contains, -> (term) { where('name LIKE ?', "%#{term}%") }
scope :tag_contains, -> (term) { where('tags LIKE ?', "%#{term}%") }
scope :search, ->(search_term) { name_contains(search_term).or(tag_contains(search_term)) }
这是我的相关搜索操作:
@search_term = params[:q]
if(@search_term)
@animes = Content.all.search(@search_term).anime_list
@mangas = Content.all.search(@search_term).manga_list
end
例如; 我的应用程序中有动漫和漫画,您可以通过它们的名称或标签搜索它们。我有《火影忍者》、《弗兰克斯的宠儿》。当我输入“na”作为搜索词时。只有“Darling in the Franxx”正在显示。如果我要搜索“aru”之类的东西,火影忍者也会显示。
当我用相同的搜索词进行搜索时,我检查了生产和开发模式的日志,它们是相同的。我的问题是,如何将第一个字母添加到搜索中?
解决方案
发生这种情况是因为LIKE
Sqlite 中的运算符区分大小写,而 Postgres 不区分大小写。
您可以通过使用ILIKE
Postgres 中的运算符来解决此问题,从而使搜索工作的情况也变得不敏感。
scope :name_contains, -> (term) { where('name ILIKE ?', "%#{term}%") }
作为旁注,我建议在开发中使用与生产中相同的数据库,这将为您省去很多麻烦。
推荐阅读
- c# - 平衡三个变量之间的数字与偏差
- java - 如何在 HTML 页面中显示 Jasper 报告
- xpages - 如果视图没有文档,则找不到行数据变量
- python - 如何使 Pandas 列名提取的迭代循环更有效?
- jquery - 如何删除:点击后悬停在手机上
- javascript - Javascript 对象的默认属性
- itext - 如何获取文本并转换为横向和两个文本列的 PDF?
- bixby - actionFgColor 和 actionBgColor 有什么作用?
- excel - 将 VBA DDE 通信代码转换为 Python
- android - 如何将记录添加到 Firebase 数据库中?