Моя таблица пользователей содержит столбцы first_name
и last_name
, а name
- это виртуальный атрибут.Например, у меня есть эти записи:
Aen Tan
Lily Chou Chou
Nuon Baby
Когда я ищу по двум словам, я получаю ожидаемый результат:
"aen tan" Aen Tan
"lily chou" Lily Chou Chou
Но когда я ищу по одному слову, например "aen" Я получаю все три записи.
Вот мой запрос:
scope :find_by_name, lambda {|name| where("first_name LIKE ? or last_name LIKE ?", '%' + name.split(' ').first + '%', '%' + name.split(' ')[1, name.split(' ').length-1].join(' ') + '%')}
И он выдает этот SQL, когда я ищу по одному слову " aen ":
SELECT `users`.* FROM `users` WHERE (first_name LIKE '%aen%' or last_name LIKE '%%')
Думаю, проблема в том, что фамилия пуста.Как это исправить?Если дано только одно слово, должен ли я искать в обоих столбцах слово?
Это подводит меня к чему-то еще, о чем я думаю.Если я найду «tan + aen», я ничего не получу, но вполне возможно, что пользователи получат обратный порядок имен.Как я могу создать запрос, который учитывает это?