2011-10-08 31 views
5

Tác vụ có thể hoạt động tốt và mọi thứ nhưng tôi đã tự hỏi liệu có cách nào để hạn chế đám mây thẻ chỉ thành các thẻ phổ biến nhất không? Không phải là nó giống như đặt hàng đám mây của tôi theo thứ tự mà trong đó các thẻ được tạo ra.Chỉ hiển thị các thẻ phổ biến nhất trong đám mây từ khóa actions_as_taggable_on

Nhưng có ý nghĩa hơn khi đám mây thẻ chỉ hiển thị các thẻ phổ biến nhất.

điều khiển của tôi có:

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

và quan điểm của tôi có:

<% 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 %> 

Nhưng tất cả điều này là hiển thị 40 thẻ đầu tiên được tạo ra, và sau đó kích thước mỗi thẻ theo bao nhiêu lần nó sử dụng

Trả lời

7

Bạn có thể sử dụng MyModel.tag_counts_on(:tags) để nhận danh sách thẻ, sắp xếp theo số lượng thẻ giảm dần (thẻ được sử dụng nhiều nhất trước) và nếu bạn muốn giới hạn số đó cho một số cụ thể, bạn chỉ có thể nối thêm .limit(my_magic_number) vào nó.

Vì vậy, để có được một danh sách 10 thẻ phổ biến nhất trên model Post của bạn, bạn muốn làm điều gì đó như thế này:

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

Nếu sau đó bạn muốn xem có bao nhiêu lần mỗi thẻ đã được sử dụng, các đối tượng trong @tags mỗi đối tượng có một thuộc tính count mà bạn có thể xem.

EDIT: (trích xuất từ ​​một trong các nhận xét của tôi bên dưới) ... và nếu bạn muốn các thẻ theo thứ tự cụ thể (thẻ được sử dụng nhiều nhất trước) với một số giới hạn được xác định bên ngoài, bạn có thể sử dụng: Post.tag_counts_on(:tags).order('count desc').limit(however_many_you_want)

+0

'tag_counts_on' được ghi lại ở đây: https://github.com/mbleigh/acts-as-taggable-on (tìm kiếm" Tính toán đám mây từ khóa "trên trang) – Frost

+0

Tôi đã cập nhật câu hỏi của mình, tag_counts_on đơn giản lấy tất cả các thẻ và đếm từng thẻ. Tôi đang cố gắng sắp xếp chúng theo số lượng thẻ hoặc chỉ hiển thị các thẻ phổ biến nhất – rugbert

+4

Vâng, sau đó thực hiện điều gì đó như 'Post.tag_counts_on (: tags) .order ('count desc'). Limit (tuy_many_you_want)'. – Frost

1

Theo tài liệu, bạn chỉ cần phải vượt qua các tùy chọn bạn cần để tính toán của bạn, trong trường hợp của bạn (điều khiển):

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

view của bạn vẫn giữ nguyên. Trân trọng!

Các vấn đề liên quan