如何在Ruby on Rails 3.2.7的索引页面上显示来自Acts as Taggable On的标签云?

我对Ruby on Rails很新,所以可能有一个我想念的简单解决方案。

tldr版本 – 如何在该模型的索引页面上显示分配给特定模型的所有实例的不同(即无重复)标记的Acts As Taggable On标记云?

更长的版本 – 我有一个名为Video的模型,我已成功设法使用Acts as Taggable On实现标记function和这个梦幻般的教程 。

我现在要做的是,在video的索引页面(index.html.erb)上,显示用户为各个video分配的所有单个标记的摘要。 例如,假设我有三个video,每个video标记如下:

Video 1: great, banana, book Video 2: small, great, apple Video 3: rubbish, small, banana 

我希望索引页面显示以下标签列表:

 great, banana, book, small, apple, rubbish. 

我的模型代码(省略)如下:

 class Video < ActiveRecord::Base attr_accessible :tag_list # Lots of other fields in here as well, but not relevant acts_as_taggable_on :tags end 

我的video助手中的代码如下:

 module VideosHelper include ActsAsTaggableOn::TagsHelper end 

最后,根据gem的文档,我将以下代码添加到我的控制器:

 class VideosController < ApplicationController def tag_cloud @tags = Video.tag_counts_on(:tags) end end 

那么,我应该将哪些代码添加到我的视图的索引页面? 我根据文档再次尝试了以下内容:

   :tag, :id => tag.name }, :class => css_class %>  

但是当我转到video索引页面时,这会返回以下错误:

 undefined method `empty?' for nil:NilClass 

正如我所说,我显然错过了一些简单的东西,但我对Rails(和Ruby)完全不熟悉,所以我仍然找不到自己的脚。

好吧,在黑客攻击了一下后,我我找到了一个解决方案,以防其他人想知道如何做到这一点碰巧遇到了这个问题。

但是,请注意我是RoR的初学者,所以这可能不是最好的解决方案 – 如果我做错了,或者你有更好的解决方案,请随时告诉我!

在视图中添加此代码,以按顺序显示特定模型的标记列表:

 @tags = ActsAsTaggableOn::Tag.all(:order=>'name') <% if @tags.count > 0 %> 
    <% @tags.each do |tag| %>
  • <%= link_to tag.name, tagged_url(:tag => tag.name) %>
  • <% end %>
<% else %>

There are no tags on the system.

<% end %>

这导致了一个非常基本的显示,由于我的经验不足,我建议谨慎使用这种方法 – 我敢肯定它不是最好的,甚至是“最安全”的方法,所以要小心!