我有一个类似于以下内容的数据库条目:
name = servername\vs1
我们正在寻找这个词的搜索。
scope :search, ->(term) {
if term
where('name LIKE ?', "%#{term}%")
else
all
end
}
然而,它找不到它。当有人搜索severname
时,它会显示出来。但当它们包含反斜杠时,却找不到它。
在做了一些研究后,我发现rails目前在搜索之前向查询术语添加了一个反斜杠(servername\\vs1
),但是mysql需要以下格式:(servername\\\\vs1
)。
所以,我希望有一种简单的rails方式来添加额外的反斜杠。寻找任何好的解决方案。
由于
答案 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%')"