Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ';c';-'Ç';RoR中的区分大小写查询_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails ';c';-'Ç';RoR中的区分大小写查询

Ruby on rails ';c';-'Ç';RoR中的区分大小写查询,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个自动完成框来搜索模型。在搜索方法中,我有一个条件 MyModel.where("upper(translate(content,'ıişğüçö\302\240','IİŞĞÜÇÖ')) like '%#{q}%'") 如果查询str:“çağdaş”,查询将找到“çaĞdaş”或“çaĞdaş”等 但是现在我想扩展这个搜索方法。我想让我的查询找到带有“cagdas”的“şagdaş”和ex 有什么想法吗 谢谢。这取决于您的数据库。。。 在postgres中,您可以使用ILIKE SQ

我有一个自动完成框来搜索模型。在搜索方法中,我有一个条件

MyModel.where("upper(translate(content,'ıişğüçö\302\240','IİŞĞÜÇÖ')) like '%#{q}%'")
如果查询str:“çağdaş”,查询将找到“çaĞdaş”或“çaĞdaş”等

但是现在我想扩展这个搜索方法。我想让我的查询找到带有“cagdas”的“şagdaş”和ex

有什么想法吗


谢谢。

这取决于您的数据库。。。 在postgres中,您可以使用ILIKE SQL函数


您使用的是哪种DBMS和字符集?

嗯。虽然我个人不太喜欢使用特定于DB的SQL,但我建议您看看PostgresQL中的fuzzymatch操作:

[编辑]:这是一种更为通用的方法,需要或依赖于对匹配算法的预计算(soundex是一种古老的方法,但你可能会在谷歌上找到很多关于这一点的信息)

我这样做了

首先,我转换了非英语的查询字符串中的字符。像
ç=>c,İ=>I

然后我重新编写我的条件字符串,如下所示

MyModel.where("translate(content,'ışğüçöİŞĞÜÇÖ','isgucoISGUCO') ilike '%#{q}%'")
现在,它的工作方式和它需要的一样

请注意,这是一个非常具体的解决方案


希望这对任何人都有帮助。

请注意,Soundex对于非英语名称不是很有用。
。我的数据库也不是非英语的。