2012-03-14 4 views
0

В моей articles_controller у меня есть определение последующихОшибка при оценке nil.sort_by

def index 
    @tags = Article.tag_counts_on(:keywords) || '' 
    klass = Article 
    klass = klass.tagged_with(@keyword) if (@keyword = params[:keyword]).present? 
    @articles = klass.paginate(:page => params[:page]) 
    @articles = Article.where(:state => '4').paginate(:page => params[:page], :per_page => 10) 
    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @articles } 
    end 
end 

и мои взгляды/статьи/index.html.erb У меня есть код:

<% @tags.sort_by(&:count).reverse.each do |k| %> 
    <% url_opts = {:action => "index", :controller => "articles"} 
     link_name = "#{k.name} (#{k.count})" %> 
    <% if @keyword == k.name %> 
     <%= link_to link_name, url_opts.merge(:keyword => nil), :class => "tag current_tag", :title => "Click again to see all" %> 
    <% else %> 
     <%= link_to link_name, url_opts.merge(:keyword => k.name), :class => "tag", :title => "Click to filter by #{k.name}" %> 
    <% end %> 
    <% end %> 

Я использую рубин 1.9.2, Rails 3.0.11 и в Gemfile камень акт-в-taggable-на и последующий код

rails generate acts_as_taggable_on:migration 

создать таблицы тегов й -осна-

В моих журналах у меня есть эта ошибка:

Rendered статьи/index.html.erb внутри макетов/приложений (57.4ms) Завершено 500 Внутренняя ошибка сервера в 189ms

ActionView :: Template :: Ошибка (у вас есть нулевой объект, если вы этого не ожидали! Возможно, вы ожидали экземпляр массива. Ошибка при оценке nil.sort_by)

Переменная @tags - это массив? и иметь нулевой объект?

ответ

1

Эта ошибка является общим Rails конфузор (вероятно, рубин, на самом деле), что просто означает @tags была равна нулю, когда вызывается метод sort_by ... и я предполагаю, что ошибка пытается быть полезным, поскольку sort_by является метод Array.

Итак, почему @tags nil? Запустите rails console (в каталоге проекта) и выполните Article.tag_counts_on('something') - где 'something' - это ключевое слово.

Возможно, вы имели в виду в первой строке для получения ключевых слов из массива params?

@tags = Article.tag_counts_on(params[:keywords]) 

Кроме того, вам необходимо обрабатывать случай, когда теги не найдены, не так ли?

+0

вероятно, вы имеете право. когда в консоли пишите Article.tag_counts_on (: keyworld) Я беру пустой хеш: => []. Почему я этого не делаю сейчас. Я думал, что метка дескриптора дескриптора дескриптора, и по этой причине я создаю файлы app/models/tag.rb и app/models/tagging.rb, поэтому моя ошибка на табличном теге. –

0

Окончательно решение для этой ошибки для меня было: НЕ СУХОЙ. При добавлении кода от def index to def all on articles_controller моя проблема исчезнет.

мой новый articles_controller

 def index 
    @tags = Article.tag_counts_on(:keywords) 
    klass = Article 
    klass = klass.tagged_with(@keyword) if (@keyword = params[:keyword]).present? 
    @articles = klass.where(:state => '4').paginate(:page => params[:page]) 
    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @articles } 
    end 
    end     

     def all    
    @tags = Article.tag_counts_on(:keywords) 
    klass = Article 
    klass = klass.tagged_with(@keyword) if (@keyword = params[:keyword]).present? 
    @articles = klass.where(:state => ['3', '4']).search(params[:search]).order('accepted desc').paginate(:page => params[:page], :per_page => 10) 
      respond_to do |format| 
     format.html { render 'index' } 
     format.xml { render :xml => @articles } 
    end 
    end 
Смежные вопросы