act_as_taggable_on tag_cloud выдает неопределенный метод «пустой?» для нуля: NilClass

Я как бы застрял на создании файла 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

красным цветом на странице ошибки выделена эта строка: -tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class|

Я действительно не понимаю, что я делаю неправильно, поскольку я точно следую документации, и поиск в Интернете, похоже, мне тоже не помогает. Я нашел одно решение, но я действительно не хочу делать это таким образом, я чувствую, что должен быть другой, лучший способ. Это решение в этом вопросе о стеке: -index-page-in-ruby-on">Как отобразить облако тегов из Acts as Taggable On на индексной странице в Ruby on Rails 3.2.7?

Я чувствую, что это как-то связано со мной, использующим рельсы 4, но я не уверен.

Любое предложение будет приветствоваться! Заранее спасибо.


person Tijmenh    schedule 27.05.2014    source источник
comment
Вы правильно копируете вид? Похоже, что он не соответствует допустимому синтаксису, и какие сценарии вы используете для представления индекса, имеет ли он расширение .html.erb?   -  person Russell Yan    schedule 28.05.2014
comment
Нет, это хамл. .html.haml Код конвертируется из .erb в .haml, это не должно быть проблемой.   -  person Tijmenh    schedule 28.05.2014


Ответы (1)


У меня была такая же проблема, и это сработало для меня, я надеюсь, что это сработает и для вас.

Добавьте фильтр «до» в свой 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 %>

Теперь все работает в моем приложении. Я надеюсь, что это поможет вам.

person satanin    schedule 12.08.2014
comment
Эй, спасибо за решение, оно сработало, но не могли бы вы объяснить, как вы пришли к этому решению? Я имею в виду, почему добавление before_action помогло? - person user2002522; 06.09.2015