mysql - 我可以在 Rails .where() 中使用正则表达式吗?

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

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

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}%")

最佳答案

由于您使用的是 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 正则表达式不区分大小写,因此您无需担心该问题。

关于mysql - 我可以在 Rails .where() 中使用正则表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20314086/

相关文章:

ruby - 让Guard在docker容器中运行

mysql - 我应该使用更新还是批量更新?

mysql - 如何在MySQL表中查找特定列名并清除结果?

php - 绑定(bind)后如何以字符串形式检索 MySql 语句?

ruby-on-rails - 按名称记录调试日志中的每个方法调用

ruby-on-rails - Rails rename_column 更改列的类型

mysql - 处理进度条上显示的 MySQL 查询

javascript - 需要重要服务器端逻辑的 Web 应用程序应使用哪个框架?

ruby-on-rails - rake db:migrate无法正常工作

javascript - 如何将Javascript添加到simple_form?