2011-01-12 33 views
2

我在我的數據庫中的兩個條目如何找到標籤的數量在行爲相匹配的加標籤上

OBJ1被標記爲「你好,世界,地球」 OBJ 2被標記爲「你好」

如果我做modelName.tagged_with([「你好」,「世界」,「星球」,「地球」],:任何=>真)

我想按照從最高到最低數量的標籤匹配。 所以在這種情況下,我想訂單成爲Obj1,Obj2

我該怎麼做?有沒有辦法獲得每個返回結果匹配的標籤數量?

+0

語言/平臺/問題? – leppie

+0

在軌道上的紅寶石和我使用的行爲作爲標籤 - 在寶石 – 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標記爲「你好,美國,加拿大,iphone」和obj2標記爲「你好,世界」,我做obj.tagged_with(「你好,世界」)它應該返回(按此順序)obj2,obj1(因爲obj2的匹配數量最多) – Varun

+0

對不起,我的更新看起來更好嗎? –

+0

很好用!非常感謝:) – Varun