как найти количество совпадений тегов в действует как тег на - PullRequest
2 голосов
/ 12 января 2011

У меня есть две записи в моей базе данных

Obj1 помечен как "привет, мир, планета" Obj2 помечен как "привет"

если я сделаю modelName.tagged_with (["привет", "мир", "планета", "земля"],: any => true)

Я хочу отсортировать возвращаемые объекты в порядке совпадения тегов с наибольшим или наименьшим количеством. так что в этом случае я хотел бы, чтобы ордер был Obj1, Obj2

как я могу это сделать? Есть ли способ получить количество тегов для каждого из возвращенных результатов?

1 Ответ

3 голосов
/ 12 января 2011

Вы можете вызвать tag_list на объектах и ​​использовать это, чтобы выяснить, сколько существует тегов:

tags = %w{hello world planet earth}
objs = ModelName.taggedWith(tags, :any => true)
objs.sort_by! { |o| -(tags & o.tag_list).length }

tags & o.tag_list дает пересечение тегов, которые вы ищете, и найденных тегов, затем мы отменяем размер пересечения, чтобы сказать sort_by (сортировка по возрастанию), чтобы поместить большие пересечения вперед Отрицание результата - это простой способ изменить обычный порядок сортировки.

...