Как выбрать строки, которые начинаются с цифры в Rails? - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть страница, которая показывает элементы в индексе.

Я могу получать предметы по почте, используя следующее:

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

Но я не могу найти элегантное решение для имен, начинающихся с цифры (0-9).

Как мне переписать эту или отдельную область, которая позволила бы мне искать имена, начинающиеся с цифры?

РЕДАКТИРОВАТЬ: Я пытаюсь получить все строки, которые начинаются с 0-9 за один раз (не отдельно для каждого числа).

Ответы [ 4 ]

4 голосов
/ 19 декабря 2011

это должно работать

scope :starts_with_number, where("name REGEXP '[0-9]%'")
1 голос
/ 19 декабря 2011

Джейкоб, попробуйте эту слегка переписанную версию того, что вы получили в итоге:

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

Обратите внимание, что это должно только показать, какой замечательный язык Ruby, а не то, как проблема должна быть решенаслишком много вызовов базы данных).

0 голосов
/ 20 декабря 2011

Одним из недостатков REGEXP является то, что он не может использовать индексы. однако

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

может использовать индекс по имени. Это зависит от символов 0-9: они находятся именно в таком порядке, и между ними нет ничего, что будет иметь место в таких вещах, как ascii, utf8, но не в том случае, если вы использовали ebcdic или что-нибудь сумасшедшее, подобное этому

0 голосов
/ 19 декабря 2011

Вот как я это сделал:

@letter_merchants = []
(0..9).to_a.each do |digit|
  @letter_merchants |= Merchant.by_letter(digit)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...