我需要在轨道模型中改进范围,但我无法找到如何做到这一点。
现在我有这样的范围:
scope :starts_with, -> (letters) { where("name like ?", "#{letters}%")}
所以我可以这样做:Wanker::State.starts_with('a')
我得到所有以#em> a 开头的州。
但我想做那样的事情:
Wanker::State.starts_with(['a', 'b', 'c'])
适合的范围是什么?
答案 0 :(得分:2)
您正在寻找:
scope :starts_with, -> (letters) { where("name REGEXP ?", "^(#{letters.join('|')})")}
# or
scope :starts_with, -> (letters) { where("name RLIKE ?", "^(#{letters.join('|')})")}
p1|p2|p3
- 替代;匹配任何模式p1,p2或p3
查看expr REGEXP pat, expr RLIKE pat
。
执行字符串表达式expr与模式pat的模式匹配。模式可以是扩展的正则表达式,其语法将在本节后面讨论。如果expr匹配pat,则返回1;否则返回0.如果expr或pat是
NULL
,则结果为NULL
。RLIKE
是REGEXP
的同义词,为mSQL兼容性提供。