如何选择以Rails中的数字开头的行?

时间:2011-12-18 20:29:57

标签: mysql ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我有一个页面,显示索引中的项目。

我可以使用以下方式逐个获取项目:

scope :by_letter, lambda { |letter| where("name LIKE '#{letter}%'") }

但我无法找到以数字(0-9)开头的名字的优雅解决方案。

我怎样才能重写这个或单独的范围,让我搜索以数字开头的名字?

编辑:我正在尝试一次性获取以0-9开头的所有行(不是每个数字都单独)。

4 个答案:

答案 0 :(得分:4)

这应该有效

scope :starts_with_number, where("name REGEXP '[0-9]%'")

答案 1 :(得分:1)

雅各布,试试这个稍微重写过的版本:

@letter_merchants = (0..9).map { |d| Merchant.by_letter(d) }

请注意,这应该只说明Ruby的语言有多棒,而不是如何解决问题(数据库调用太多)。

答案 2 :(得分:0)

以下是我最终如何做到这一点:

@letter_merchants = []
(0..9).to_a.each do |digit|
  @letter_merchants |= Merchant.by_letter(digit)
end

答案 3 :(得分:0)

REGEXP的一个缺点是它无法使用索引。然而

scope :starts_with_number, where("name >= '0' and name < ':')

可以使用名称上的索引。它确实依赖于字符0-9:正好按照这个顺序,在ascii,utf8之间没有任何内容,但如果你使用ebcdic或任何类似的东西就没有