我有一个显示各种艺术家首字母的菜单:
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/