2013-07-31 2 views
0

내가레일 3 개 복수 키워드 필터링 쿼리

@keywords = ['news', 'TV show', 'games', 'IT'] 

같은 키워드의 배열로 사용자의 입력을 받아 필터링 알고리즘을 쓰고 있어요 내 데이터베이스에, 예를 들어, 비디오 테이블을 테이블을 조회 할 수 있습니다. 쉼표로 구분 된 두 개의 태그를 포함하는 문자열 필드가 테이블에 있습니다. 동영상 인스턴스의 경우 태그 입력란에 키워드가 하나 이상 포함되어 있으면 반환해야합니다. 나는 그럼 난 첫째, 중복 된 비디오를 포함하는 것, 발견

@videos = [] 
@keywords.each |word| do 
    @videos.push(Video.where('tags LIKE ?', '%#{word}%')) 
end 
@videos = @videos.flatten 

처럼 뭔가 시작하고, 둘째, 전혀 효율적이지 키워드의 길이로 데이터베이스를 여러 번 쿼리합니다.

개선을위한 제안 사항이 있으십니까?

답변

0

이 당신이 like 절 필요로하는 경우 그것을 할 것입니다 : 정직 아마

@videos = Video.where((@keywords.map { |kw| "tags like \'%#{kw}%\'" }).join(" or ")) 

아니라 대부분의 루비 - 억양을하지만.