как найти количество совпадений тегов в acts в качестве тегируемых на
-
10-10-2019 - |
Вопрос
У меня есть две записи в моей базе данных
Obj1 помечен как "привет, мир, планета" Obj2 помечен как "привет"
если я сделаю ModelName.tagged_with (["привет", "мир", "планета", "земля"], :any=> true)
Я хочу отсортировать возвращаемые объекты в порядке от наибольшего к наименьшему количеству совпадающих тегов.поэтому в данном случае я бы хотел, чтобы порядок был Obj1, Obj2
как я могу это сделать?есть ли способ получить количество тегов, совпадающих для каждого из возвращаемых результатов?
Решение
Ты можешь позвонить 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
(который сортирует в порядке возрастания) чтобы поместить большие пересечения впереди, отрицание результата - это простой способ изменить обычный порядок сортировки.