2015-01-24 2 views
1

나는 act-as-taggable gem을 사용하고 있으며 최대 유사 태그를 기반으로 주어진 기사와 비슷한 기사를 정렬하고 싶습니다. 예를 들어 관련 기사를 보여줘야하고 태그가 붙은 기사가 있습니다.레일 : 관련 레코드 찾기

A1 = ([“awesome”, “cool”, "foo", "bar", "rails"])

A2 = ([“awesome”, “cool”, "foo", "bar", "python"])

태그

([“awesome”, “cool”, "foo", "bar", "rails"])

이 다른 이들과 함께

A3 = 마지막으로 A3 HOWA 내가에서만이

@related_articles = Article.tagged_with(@article.tag_list, any: true) 실제로 내가 일을 해요하지만이 쇼 모든 태그를 얻을 수 있습니다 A2 & 다음에 첫 번째해야합니다 관련 기사 A1의 정렬에 ([“awesome”, “cool”, "foo", "python", "django"])

하나의 유사한 태그가 있기 때문에 5 또는 4 개의 유사한 태그가있는 기사가 있더라도 다른 태그는 사용되지 않습니다. 다른 해결책은 :match_all => true입니다. 그러나이 태그가있는 기사가없는 경우 관련 기사는 0이됩니다. 내가 어떻게 이걸 얻을 수 있을까?

답변

1

저는이 보석에 익숙하지 않지만 이렇게 할 수 있습니다. 당신이 @article 이름과 태그 @article.tag_list 통해 액세스 할 수 있습니다에서 유사한 물품을 얻고 싶은 주요 기사를 가정하면, 당신은 할 수 :

1 - @article에서 태그와 일치하는 모든 기사를 가져 오기 :

@related_articles = Article.tagged_with(@article.tag_list, any: true) 

2 - 수행하여 나중에 그들을 정렬 :

@related_articles.sort_by { |ra| (ra.tag_list & @article.tag_list).size }.reverse 

여기서 핵심은 & 연산자입니다. 콘솔에서 그걸 가지고 놀자.

+0

그것은 작동 해결책 인 것 같다. – userails

관련 문제