2015-01-28 3 views
0

Моя таблица Пользователь выглядит следующим образомRails простой поиск Запрос

Name  | SecondName 
------------------------- 
"David" | "Graham" 
------------------------- 
"Gary" | "Jules" 
------------------------- 
"Gary" | "Lincon" 

Im пытается с помощью этой функции в моей модели

def nameSearch(search) 
where('name like ? OR secondName like ?', "%#{search}%", "%#{search}%") 
end 

Моя функция работает с этим:

User.nameSearch("Gary") возвращает 2 записи

User.nameSearch ("ary") возвращение 2 запись

Как я могу выполнить этот поиск?

User.nameSearch("Gary Jules") returns nil 

Он должен вернуть 2 записи вместо нуля.

+0

Обозначить переменную поиска на два токена. – trueinViso

+0

@trueinViso Я мог бы определить функцию, которая принимает два параметра, но вернет только точный поиск (1 запись). Вместо этого я хочу вернуть все записи. В моем примере результат, который я искал, вернет 2 записи. – Abraham

ответ

2

Вы можете разделить строку на место, чтобы получить массив, добавьте% подстановочные затем запрос с этим массивом, что-то вроде:

def name_search(search) 
    search_terms = search.split(" ") 
    search_terms_with_wildcard = search_terms.map {|val| "%#{val}%" } 
    Product.where("name LIKE ANY (array[?]) OR secondName LIKE ANY (array[?])", search_terms_with_wildcard, search_terms_with_wildcard) 
end 
+0

Здравствуйте, вот большое предложение, но он бросает мне ошибку: 'SQLite3 :: SQLException: возле "[ '% Gary%', '% Жюль%']"' Возможно slqlite3 проблема. Должен ли я использовать postgresql? – Abraham

+0

Почему-то мой мозг не думал в sqlite3 для вопроса. Виноват. Я переписал это после работы для вас, в активной записи, если мне будет сложно. Вернитесь позже. –

0

Я не знаю, почему он будет возвращать точный поиск, если вы попробовали метод с двумя параметрами, он должен действительно решить вашу проблему.

def name_search(first, last) 
    where("name like ? OR second_name like ?", "%#{first}%", "%#{last}%") 
end 

Кстати, сделать свой method name в змей дело, что это соглашение для рельсов.

Смежные вопросы