使用带有字符串反斜杠的mysql执行rails查询

时间:2014-06-06 16:00:27

标签: mysql ruby-on-rails

我有一个类似于以下内容的数据库条目:

name = servername\vs1

我们正在寻找这个词的搜索。

  scope :search, ->(term) {
    if term
      where('name LIKE ?', "%#{term}%")
    else
      all
    end
  }

然而,它找不到它。当有人搜索severname时,它会显示出来。但当它们包含反斜杠时,却找不到它。

在做了一些研究后,我发现rails目前在搜索之前向查询术语添加了一个反斜杠(servername\\vs1),但是mysql需要以下格式:(servername\\\\vs1)。

所以,我希望有一种简单的rails方式来添加额外的反斜杠。寻找任何好的解决方案。

由于

1 个答案:

答案 0 :(得分:2)

最容易使用Arel,如下所示:

  scope :search, ->(term){
    t = arel_table
    term ? where( t[:name].matches("%#{term}%") )
         : all
  }

示例:

Simple.search('\a').to_sql
"SELECT \"simples\".* FROM \"posts\"  WHERE (\"simples\".\"title\" LIKE '%\\a%')"