首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >评估nil.sort_by时出错

评估nil.sort_by时出错
EN

Stack Overflow用户
提问于 2012-03-15 03:27:54
回答 2查看 379关注 0票数 0

在我的articles_controller中,我有如下定义

代码语言:javascript
复制
 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中,我有这样的代码:

代码语言:javascript
复制
  <% @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 %>

我使用的是Ruby 1.9.2、Rails 3.0.11和Gemfile中的gem act-as-taggable-on和以下代码

代码语言:javascript
复制
 rails generate acts_as_taggable_on:migration

创建表、标签和标记

在我的日志中,我有这个错误:

布局/应用程序内的渲染文章/index.html.erb (57.4ms)在189ms内完成了500个内部服务器错误

ActionView::Template::Error (您没有预料到的nil对象!您可能需要一个Array的实例。评估nil.sort_by时出错)

变量@tags是一个数组吗?并且有一个空的对象?

EN

回答 2

Stack Overflow用户

发布于 2012-03-15 04:10:20

这个错误是一个常见的Rails错误(实际上可能是Ruby ),它只是意味着在调用sort_by方法时@tags为零……我猜这个错误是为了有所帮助,因为sort_by是数组的一种方法。

那么,为什么@tags是nil呢?启动rails console (在项目目录中)并执行Article.tag_counts_on('something') --其中'something'是一个关键字。

也许您的意思是在第一行中从params数组中获取关键字?

代码语言:javascript
复制
@tags = Article.tag_counts_on(params[:keywords])

此外,您还需要处理没有找到标记的情况,对吧?

票数 1
EN

Stack Overflow用户

发布于 2012-03-15 22:10:33

最后,对我来说,这个错误的解决方案是:不干。当在articles_controller上添加从def index到def all的代码时,我的问题消失了。

我的新articles_controller

代码语言:javascript
复制
        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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9708804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档