Rails - поиск и сортировка по первой букве - PullRequest
2 голосов
/ 09 апреля 2011

Я хотел бы перечислить пользователей на основе списка алфавитов ... т.е. когда я нажимаю на букву "A", он должен перечислять всех пользователей, начинающихся с буквы A, то же самое для B, C и т. Д.

Для этого я использую код

@users = User.search(params[:char])

в params[:char] Я передаю буквы (a, b, c, d и т. Д.).

В этом коде выполняется поиск слова с этой буквой.

Вместо этого я хочу получить список пользователей, начинающихся с буквы в форме буквы.

Подскажите, пожалуйста, как это сделать.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 09 апреля 2011

Возможно, вы захотите использовать запрос типа SQL.

@users = User.all(:conditions => "name like '#{params[:char]}%'")

См. Документацию по Методы ActiveRecord Finder и Соответствие шаблону MySQL для получения дополнительной информации.(Даже если вы используете другую базу данных, запрос должен быть очень похожим.)

2 голосов
/ 03 сентября 2015

Для людей, которые хотят искать по первой букве, вы можете сделать что-то вроде:

 Patient.where('substr(name, 1, 1) = ?', 'm')

Исправление: я просто прочитал комментарий для чувствительного к регистру, так что вы можете включить любую из букв, чувствительных к регистру, с:

 Patient.where('substr(field_name, 1, 1) = ? OR substr(field_name, 1, 1) = ?', 'C', 'c')
 # there from your controller or model can replace that with
 Patient.where('substr(name, 1, 1) = ? OR substr(name, 1, 1) = ?', letter.upcase, letter.downcase)

Вот и все

0 голосов
/ 14 августа 2017

Не хватает репутации, чтобы комментировать, поэтому, чтобы развернуть heriberto perez ответ, вы можете использовать lower для поиска с учетом регистра

Patient.where('substr(lower(name, 1, 1)) = ?', letter.downcase)
0 голосов
/ 09 апреля 2011
@user = User.all :conditions => ['substr(name,1,1) = ?', selected_letter]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...