2015-01-28 2 views
0

내 테이블 사용자레일 간단한 검색 쿼리

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

내 기능이 작동이

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

임 내 모델에서이 기능을 시도하고 다음과 같습니다

User.nameSearch("Gary") 수익률이 기록을

User.nameSearch ("ary")는 2 레코드를 반환합니다.

어떻게 검색합니까?

User.nameSearch("Gary Jules") returns nil 

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

안녕하세요, 좋은 제안이지만, 오류가 발생했습니다 : '[ '% Gary %', '% Jules %'] '' 아마도 slqlite3이 문제가됩니다. postgresql을 사용해야합니까? – Abraham

+0

내 머리가 어떤 이유로 sqlite3에서 질문하지 않았습니다. 내 잘못이야. 나는 너를 위해 일한 후, 내가 쓸데없는 일이 생기면 적극적으로 기록 할 것이다. 나중에 다시 확인하십시오. –

0

그것은 정확한 검색하는 경우를 반환하는 이유 당신은 2 매개 변수 방법을 시도, 그것은 정말로 당신의 문제를 해결해야합니다.

그런데 너의 method name을 뱀 케이스로 만들라. 그것은 레일을위한 규칙이다.