我写了一个查找器,如下所示:

@cars = @cars.joins(:manufacturers).where("manufacturers.name ILIKE ?", params[:manufacturer].gsub!(/-/, ' '))
params[:manufacturer]以一种由Rails生成的.parameterize d字符串的形式出现。

问题是ILIKE无法正确匹配其中包含“'”或“&”的字符串。

因此,例如,一些存储在我的数据库中的字符串及其参数化版本:
  • “这是测试”参数化:“这是测试” gsubbed:“这是测试”
  • “他没有做”参数化:“他没有做” gsubbed:“他没有做”
  • “This&That”参数化:“this-that” gsubbed:“this that”

  • 因此,当我在2的第一部分和2的第三部分之间进行ILIKE时,它不会创建匹配项。与3相同。1显然可以正常工作。

    有什么想法即使字符串中有特殊字符也如何获得正确的匹配?

    最佳答案

    由于这与slug系统非常相似,因此您只需要添加一个新字段,然后将其命名为任何您认为合适的字段,就不要忘记添加index,这样您就不会浪费时间在字符串中进行搜索。

    另外,您可以添加before_createbefore_save回调以在保存对象时以计划搜索的格式自动创建它。

    关于sql - 使用ILIKE进行Rails查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28649702/

    10-11 03:02