Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 计算nil.sort_时出错_Ruby On Rails 3_Acts As Taggable On - Fatal编程技术网

Ruby on rails 3 计算nil.sort_时出错

Ruby on rails 3 计算nil.sort_时出错,ruby-on-rails-3,acts-as-taggable-on,Ruby On Rails 3,Acts As Taggable On,在我的文章中,我有以下定义 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 = Art

在我的文章中,我有以下定义

 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
在我的视图/articles/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 %>
创建表标记和标记

在我的日志中,我有以下错误:

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

ActionView::Template::Error(当您没有预料到它时,您有一个nil对象! 您可能期望数组的一个实例。 计算nil时出错。排序依据(U)


变量@tags是一个数组?是否有一个nil对象?

此错误是一个常见的Rails(实际上可能是Ruby)混淆器,这意味着当您调用
排序方法时,
@tags
为nil。。。我猜这个错误是有帮助的,因为sort_by是数组的一种方法

那么,为什么
@tags
nil?启动
rails控制台
(在您的项目目录中)并执行
Article.tag\u counts\u on('something')
——其中
'something'
是一个关键字

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

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

此外,您还需要处理找不到标签的情况,对吗?

最后,对于我来说,这个错误的解决方案是:不干燥。当从中添加代码时 def索引到 我的问题解决了

我的新文章

        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

也许你是对的。在控制台中写入Article.tag\u counts\u on(:keyworld)时,我接受一个空哈希值:=>[]。为什么我现在不知道。我认为gem handle表标记,因此我创建了app/models/tag.rb和app/models/tagging.rb文件,因此我的错误可能在表标记上。
        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