我可以在Rails .where()中使用Regex吗?

 sean 发布于 2023-02-13 15:53

我有一个菜单,显示各种艺术家的第一个字母:

A B C D E F ...

它基本上是一种通过名字的第一个字母过滤许多艺术家的方法.

问题有些以符号,数字或其他任何东西开头[a-z].

所以我想要它

# A B C D E F ...

但是我如何使用where子句来完成这项工作呢?

filter_letter = (params[:letter] =~ /[a-z]/i ? params[:letter] : "something_here" )

@artists = Artist.where("name LIKE ?", "#{filter_letter}%")

Peter Alfvin.. 5

由于您使用的是mysql,因此可以利用它对正则表达式的支持.您需要切换到RLIKE运算符并相应地调整操作数.

例如,使用现有结构,您可以使用以下内容

filter_letter = (params[:letter] =~ /[a-z]/i ? params[:letter] : "[^a-z]" )
@artists = Artist.where("name RLIKE ?", "^#{filter_letter}")

有关更多信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html.请特别注意,mysql正则表达式不区分大小写,因此您无需担心该问题.

1 个回答
  • 由于您使用的是mysql,因此可以利用它对正则表达式的支持.您需要切换到RLIKE运算符并相应地调整操作数.

    例如,使用现有结构,您可以使用以下内容

    filter_letter = (params[:letter] =~ /[a-z]/i ? params[:letter] : "[^a-z]" )
    @artists = Artist.where("name RLIKE ?", "^#{filter_letter}")
    

    有关更多信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html.请特别注意,mysql正则表达式不区分大小写,因此您无需担心该问题.

    2023-02-13 15:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有