acts_as_taggable_on tag_cloud抛出未定义的方法`空?'为零:NilClass

时间:2014-05-27 20:38:23

标签: ruby-on-rails ruby ruby-on-rails-4 acts-as-taggable-on tag-cloud

我有点坚持创建tag_cloud。我尝试像acts_as_taggable_on文档那样做。您可以在此处找到它:https://github.com/mbleigh/acts-as-taggable-on(向下滚动到“标记云计算”。)

我的帖子助手:

module PostHelper
    include ActsAsTaggableOn::TagsHelper
end 

我的帖子控制器:

def tag_cloud
    @tags = Post.tag_counts_on(:tags).order('count desc').limit(20)
end

我在文档中唯一改变的就是获取它,以便显示20个最受欢迎的标签。

我的帖子索引视图:

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

我收到以下错误: undefined method 'empty?' for nil:NilClass

#alltags
    -tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class|
    =link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class
错误页面中的

red highligthed是这一行:-tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class|

我真的不明白我做错了,因为我正在完全遵循文档,搜索互联网似乎也没有帮助我。我找到了一个解决方案,但我真的不想这样做,我觉得必须有另一种更好的方式。这是stackoverflow问题中的解决方案:How to display a tag cloud from Acts as Taggable On on an index page in Ruby on Rails 3.2.7?

我觉得这与我使用rails 4有关,但我不确定。

欢迎任何建议!提前谢谢。

1 个答案:

答案 0 :(得分:3)

我有同样的问题,这对我有用,我希望它也适合你。

在post_controller中添加一个前置过滤器,如下所示。

class PostsController < ApplicationController
...
  before_action :tag_cloud
...
  def tag_cloud
    @tags = Post.tag_counts_on(:tags).order('count desc').limit(20)
  end
...
end

执行此操作后,此行中也出现了路径错误:

link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class

我不得不改变这样的界限:

<%= link_to tag.name, tag_path(tag.name), :class => css_class %>

现在它在我的应用程序上运行的一切。我希望这能帮到您。