2011-10-08 97 views
5

使用標記的行爲效果很好,但是我想知道是否有辦法將標籤雲限制爲只有最流行的標籤?沒錯,它看起來像是按照創建標籤的順序排列我的雲。只顯示acts_as_taggable_on標籤雲中最受歡迎的標籤

但讓標籤雲只顯示最受歡迎的標籤更有意義。

我的控制器有:

def styles_tag_cloud 
    @tags = Tattoo.tag_counts_on(:styles).limit(40) 
    end 

,我的觀點有:

<% tag_cloud(styles_tag_cloud, %w(css1 css2 css3 css4)) do |tag, css_class| %> 
    <%= link_to tag.name, { :action => :tagged, :controller =>:index, :id => tag.name }, :class => css_class %> 
<% end %> 

但所有這樣做是顯示創建的第一個40個標記,然後大小每個標籤根據多少倍已使用

回答

7

您可以使用MyModel.tag_counts_on(:tags)獲取標籤列表,按標籤計數降序排列(最常用的標籤第一個),如果您想將其限制爲特定數字,可以直接附加.limit(my_magic_number)

因此,要獲得10個最熱門的標籤列表上的Post模型,你會做這樣的事情:

@tag_counts = Post.tag_counts_on(:tags).limit(10) 

然後,如果您想看看有多少次,每次標籤已被使用, @tags中的對象每個都有一個可以查看的count屬性。

編輯:(從下面的評論我的一箇中提取)......如果你想在一個特定的順序標籤(最常用的標籤的第一),還有一些外部定義的限制,你可以使用這個:Post.tag_counts_on(:tags).order('count desc').limit(however_many_you_want)

+0

'tag_counts_on'記錄在這裏:https://github.com/mbleigh/acts-as-taggable-on(在頁面上搜索「標籤雲計算」) – Frost

+0

我更新了我的問題,tag_counts_on簡單地抓住了所有人標籤並統計每一個。我試圖按標籤數量排序,或者只顯示最受歡迎的標籤 – rugbert

+4

好吧,然後執行'Post.tag_counts_on(:tags).order('count desc')。limit(however_many_you_want)''。 – Frost

1

根據文檔,你只需要通過你需要爲你的計算,你的情況的選項(控制器):

def styles_tag_cloud 
    @tags = Tattoo.tag_counts_on(:styles).limit(40) 
    end 

你的觀點保持不變。問候!