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