我在我的一个Rails项目中面临一个问题。 我的用户数据库包含具有特殊字符的名称,我希望它们在搜索结果中显示,同时使用简单字符进行搜索。 示例:假设我有一个名为“NoëlNocciolo”的用户(请注意e上的软标记)如果我通过“ Noel Nocciolo 我想要搜索“作为参数。
任何人都可以告诉我如何处理这些情况,因为没有人知道如何提供“e with two dots”的输入。 我使用postgres作为我的数据库。
此致 卡兰
答案 0 :(得分:2)
您可以为搜索创建单独的字段“indexed_name”,并仅使用ASCII字符填充它。
然后你必须使用.gsub('ë', 'e')
(或其ASCII码的任何其他非ASCII字符)预处理查询字符串并使用此处理过的查询进行搜索
并且我相信有更优雅的方式将任何字符串转换为ascii analog我只是给你指示)
答案 1 :(得分:0)
.parameterize
或ActiveSupport::Inflector.transliterate
可能适用于您的用例。
"àáâãäå".parameterize
=> "aaaaaa"
但是,它不会处理ffi
等连字,因此您需要:
"àáâãÀffi".mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s
=> "aaaaAffi"