2012-02-26 3 views
0

У меня есть Forum и ForumTag отношения HABTM. У меня также есть массив переменных с именем @tags. Этот массив содержит имена некоторых ForumTags, которые я использую для фильтрации форумов. В настоящее время я запрашиваю все форумы, на которых есть ВСЕ теги в массиве @tags.Как получить пропущенные значения из запроса?

@forums = Forum.joins(:forum_tags).where(:forum_tags => {:name => @tags}) 
       .group("forums.id").having(['COUNT(*) = ?', @tags.length]) 
       .includes(:forum_tags).all 

Однако, я также хочу, чтобы быть в состоянии найти метки, которые являются частью возвращенных форумов, но не в массиве. Аналогично перечислению Stackoverflow «Связанные теги» в правой части страницы вопросов.

Например, если у меня есть 4 форумы:

forum A = tags are ['foo', 'bar'] 
forum B = tags are ['foo', 'bar', 'blah'] 
forum C = tags are ['foo', 'bar', 'blee'] 
forum D = tags are ['blah'] 

if @tags = ['foo','bar'], then it should return ['blah','blee'] 
    with the count on blah=1, and count on blee=1 

ответ

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