有没有办法通过ActiveRecord中的正则表达式模式进行搜索?我有一系列产品。我想根据满足多种模式的 sku 列搜索这些产品。
具有来自 [A-Z] 的单个字母的 SKU 应被视为premium products
具有单个字母 [A-Z] 和数字 [0-9] 的 SKU 应被视为standard products
具有双字母和数字 [0-9] 的 SKU 应被视为flash products
这是我需要的伪代码:
product.sku ~= /[A-Z]$/ => Premium Products
product.sku ~= /[A-Z][0-9]$/ => Standard Products
product.sku ~= /[A-Z]{2}[0-9]$/ => Flash products
我不想使用 ruby 的select
过滤。这可以通过活动记录吗?
如果您使用支持正则表达式匹配的数据库,这是可能的。例如:邮政。我已经使用Postgres作为数据库在ActiveRecord上进行了一些正则表达式搜索。你可以阅读这篇文章
因此,在您的情况下,您可以简单地执行以下操作:
premium_products = Product.where("sku ~ ?", '[A-Z]$')
standard_products = Product.where("sku ~ ?", '[A-Z][0-9]$')
flash_products = Product.where("sku ~ ?", '[A-Z]{2}[0-9]$')