2013-07-31 3 views
0

Я пишу алгоритм фильтрации, который принимает входные данные пользователя как массив ключевых слов, какRails 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 ")) 

Возможно не самый рубин эск, но прямо вперед.

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