как найти количество совпадений тегов в acts в качестве тегируемых на

StackOverflow https://stackoverflow.com/questions/4665979

  •  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 (который сортирует в порядке возрастания) чтобы поместить большие пересечения впереди, отрицание результата - это простой способ изменить обычный порядок сортировки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top