Rails:使用acts_as_taggable标记云

时间:2014-07-11 13:58:05

标签: ruby-on-rails ruby acts-as-taggable-on

我使用acts_as_taggable gem获取我的引脚的分类(标记),但我无法生成正确的云标记,以获取所有标记的列表(事实上我只有两个不同的标签)

在我的app / controllers / pins_controller.rb

def tagged
  if params[:tag].present? 
    @pins = Pin.tagged_with(params[:tag])
  else 
    @pins = Pin.postall
  end  
end


def tag_cloud
    Pin.find(:first).pins.tag_counts_on(:tags)
    @tags = Pin.tag_counts_on(:tags)
end

应用程序/模型/ pin.rb

acts_as_taggable_on :tags
end

应用程序/助手/ pin_helpers.rb

module PinsHelper
    include ActsAsTaggableOn::TagsHelper
end

在我的app / views / pins / index.html.erb

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

但是当我尝试访问我的引脚索引时,我有:

 NoMethodError in Pins#index
undefined method `empty?' for nil:NilClass

我做错了什么?我关注了acts_as_taggable gem的维基

编辑: 应用程序/控制器/ pins_controller.rb

def index
    @pins = Pin.order(votes_count: :desc)
    @pin_count = Pin.count
  end

1 个答案:

答案 0 :(得分:2)

您需要在index方法中实际提取标记:

def index
  @pins = Pin.order(votes_count: :desc)
  @tags = Pin.tag_counts_on(:tags)
  @pin_count = Pin.count
end