質問

データベースには2つのエントリがあります

OBJ1は「Hello、World、Planet」でタグ付けされていますobj2は「hello」でタグ付けされています

modelname.tagged_with(["hello"、 "world"、 "planet"、 "are"]、: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