如何正确转义Active Record where子句中的正则表达式

时间:2015-05-14 22:44:05

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord rails-activerecord

我正在使用Active Record v4.2.1使用正则表达式查询mySQL数据库。我想创建以下SQL:

SELECT `users`.* FROM `users` WHERE (email REGEXP '[@\.]gmail\.com')

但是,我似乎找不到使用Active Record创建SQL的正确方法。

User.where("email REGEXP ?", "[@.]gmail.com").to_sql

产量

"SELECT `users`.* FROM `users` WHERE (email REGEXP '[@.]gmail.com')"
User.where("email REGEXP ?", "[@\.]gmail\.com").to_sql

产量

"SELECT `users`.* FROM `users` WHERE (email REGEXP '[@.]gmail.com')"
User.where("email REGEXP ?", "[@\\.]gmail\\.com").to_sql

产量

"SELECT `users`.* FROM `users` WHERE (email REGEXP '[@\\\\.]gmail\\\\.com')"

如何让Active Record正确转义SQL?

1 个答案:

答案 0 :(得分:2)

使用to_sql时,在控制台中转义只是看起来不对,你的最后一个例子实际上是将它发送给MySQL:

SELECT `users`.* FROM `users` WHERE (email REGEXP '[@\\.]gmail\\.com')

您可以通过在控制台中运行实际查询并检查日志文件来确认这一点。