2011-01-12 18 views
2

上のようにタグ付けできる行為に一致したは、私は私のデータベース内の2つのエントリを持って

Obj1とは「こんにちは、世界は、惑星が」 OBJ2は

あれば「こんにちは」でタグ付けされたタグが付いている

私はmodelName.tagged_with(["hello"、 "world"、 "planet"、 "earth"]、:any => true)

返されたオブジェクトをタグの数の多い順にソートしたいマッチした この場合、注文はObj1、Obj2にしたいです

どうすればいいですか?返された各結果に一致するタグの数を取得する方法はありますか?

+0

言語/プラットフォーム/質問ですか? – leppie

+0

ruby​​ on railsと私はact-as-taggable-onの宝石 – Varun

答えて

3

あなたがオブジェクトの上に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(昇順で並べ替える)に交差点の大きさを打ち消して正面に大きな交差点を置くと結果が否定され、通常の並べ替え順序を逆にする簡単な方法です。

+0

を使用していますが、それはオブジェクトのタグの数だけ並べ替えて、一致するタグの数で並べ替える必要があります。 obj1に "hello、america、canada、iphone"というタグが付けられていて、obj2に "hello、world"というタグが付けられていて、obj.tagged_with( "hello、world")するとobj2、obj1( obj2には一致するタグの数が最も多いため) – Varun

+0

申し訳ありませんが、私のアップデートは良く見えますか? –

+0

これはすごくうまくいきます!ありがとうたくさん:) – Varun

関連する問題