Rails基于params的自动范围

时间:2015-02-16 08:01:01

标签: mysql ruby-on-rails activerecord

我需要在轨道模型中改进范围,但我无法找到如何做到这一点。

现在我有这样的范围:

scope :starts_with, -> (letters) { where("name like ?", "#{letters}%")}

所以我可以这样做:Wanker::State.starts_with('a')我得到所有以#em> a 开头的州。

但我想做那样的事情:

Wanker::State.starts_with(['a', 'b', 'c'])

适合的范围是什么?

1 个答案:

答案 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,则结果为NULLRLIKEREGEXP的同义词,为mSQL兼容性提供。