Meta_Search: поиск по количеству связанных записей - PullRequest
1 голос
/ 17 августа 2011

У меня есть следующие модели Rails:

class Entry < ActiveRecord::Base
  has_and_belongs_to_many :tags, :uniq => true
end

И

class Tag < ActiveRecord::Base
  has_and_belongs_to_many :entries, :uniq => true
end

Просто, чтобы было ясно, «запись» может иметь много «тегов», связанных с ней.

Используя плагин Meta_Search, я бы хотел иметь возможность выполнять поиск (через форму), который возвращает «записи», с которыми связано более 0 тегов.

Я пробовал несколько методов, включая (именованные) области и методы, но мне не удалось этого достичь.

У кого-нибудь есть идеи, как это сделать?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Это похоже на сортировку по количеству связанных записей: Rails meta_search gem: сортировка по количеству связанной модели В одном из этих ответов рекомендуется использовать counter_cache, но комментарий предполагает, что он не будет работать для HABTM.

Используйте именованную область видимости, которая может выбрать интересующие вас записи (в ответ на вопрос la @ mark) и сделать его search_method.

0 голосов
/ 17 августа 2011

Что-то вроде

Entry.joins(
        :tags
      ).select(
        "entries.*, count(tags.id) as tags_count"
      ).order(
        "tags_count DESC"
      ).group( 
        "entries.id"
      ).where(
        "tags_count != 0"
      )
...