我有一个页面,显示索引中的项目。
我可以使用以下方式逐个获取项目:
scope :by_letter, lambda { |letter| where("name LIKE '#{letter}%'") }
但我无法找到以数字(0-9)开头的名字的优雅解决方案。
我怎样才能重写这个或单独的范围,让我搜索以数字开头的名字?
编辑:我正在尝试一次性获取以0-9开头的所有行(不是每个数字都单独)。
答案 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或任何类似的东西就没有