Ruby on rails 在rails模型中编写正则表达式查询

Ruby on rails 在rails模型中编写正则表达式查询,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我有一个名为“SentEmail”的模型,它有一个名为“email\u type”的属性,其中一些以“email\u verification”加上时间戳开始。例如,它可能类似于“电子邮件\u验证\u 201413423”。 如何查询以“电子邮件验证”开头的属性的所有已发送电子邮件?如何将正则表达式写入rails中的查询? 这是我尝试过的查询:sentmail.where('person\u id=1277,电子邮件类型为“email\u-verification%”) 但是它有语法错误这应该可

我有一个名为“SentEmail”的模型,它有一个名为“email\u type”的属性,其中一些以“email\u verification”加上时间戳开始。例如,它可能类似于“电子邮件\u验证\u 201413423”。 如何查询以“电子邮件验证”开头的属性的所有已发送电子邮件?如何将正则表达式写入rails中的查询? 这是我尝试过的查询:sentmail.where('person\u id=1277,电子邮件类型为“email\u-verification%”) 但是它有语法错误

这应该可以:

SentEmail.where('email_type ~* :substring', :substring => "^email_verification")
或:


既然你特别要求正则表达式:

SentEmail.where("email_type REGEXP ?", 'email_verification.*') #SQLITE with regexp installed?

SentEmail.where("email_type ~* ?", 'email_verification.*') #Postgresql

警告:这取决于数据库。您的数据库可能支持也可能不支持REGEXP,它可能使用不同的语法。

是否确实要使用regex执行此操作

你可以试试这个

SentEmail.where('email_type like "email_verification_%"')
但是如果你真的需要一个regexp,你可以试试

SentEmail.where('email_type REGEXP "email_verification*'")

我认为正则表达式应该比sql慢(显然,如果您使用activerecord和sql的话)。

如何在其中添加其他参数?比如SentEmail。where('email\u id=12,email\u type像“email\u verification\u%”)正确吗?你可以这样做SentEmail。where('email\u id=?和email\u type像“email\u verification\u%”,email\u id')如果你想输入一个变量,这是一个很好的做法
SentEmail.where('email_type REGEXP "email_verification*'")