Ruby on rails 控制器中的轨道命名错误

Ruby on rails 控制器中的轨道命名错误,ruby-on-rails,controller,nomethoderror,Ruby On Rails,Controller,Nomethoderror,这是我的控制器 def results #searches with tags @pictures = Picture.all @alltags = Tag.all searchkey = params['my_input'] pList = [] listsize = 0 while listsize < @pictures.size pList[listsize] = 0 listsize += 1 end @alltags.each do |tag| if searchk

这是我的控制器

def results
#searches with tags
@pictures = Picture.all
@alltags = Tag.all
searchkey = params['my_input']
pList = []
listsize = 0
while listsize < @pictures.size
  pList[listsize] = 0
  listsize += 1
end
@alltags.each do |tag|
  if searchkey == tag.tagcontent
    pList[tag.picture.id-1] += 1
  end
end
@pictures.each do |picture|
  if searchkey == picture.name
    pList[picture.id-1] += 1
  end
end
@pictures = @pictures.sort {|pic1, pic2| pList[pic2.id-1] <=> pList[pic1.id - 1]}
def结果
#使用标记进行搜索
@图片
@alltags=Tag.all
searchkey=params['my_input']
pList=[]
listsize=0
而listsize<@pictures.size
pList[listsize]=0
listsize+=1
结束
@所有标签。每个do |标签|
如果searchkey==tag.tagcontent
pList[tag.picture.id-1]+=1
结束
结束
@图片。每个人都做图片|
如果searchkey==picture.name
pList[picture.id-1]+=1
结束
结束
@pictures=@pictures.sort{| pic1,pic2 | pList[pic2.id-1]pList[pic1.id-1]}
结束

调用时会出现此错误

SearchController#结果中的命名错误

你有一个零的对象,当你没有想到它! 您可能期望数组的一个实例。 计算nil时出错+ Rails.root:/Users/kevinmohamed/SnapSort/server

应用程序跟踪|框架跟踪|完整跟踪 app/controllers/search_controller.rb:31:in
block in results'
app/controllers/search_controller.rb:29:in
each' app/controllers/search_controller.rb:29:in'results'


31是pList[picture.id-1]+=1,29是@pictures.each do | picture |,为什么会发生此错误

此错误发生在您迭代的某个对象在不期望的情况下生成零时。控制器中有很多代码。我建议将这些逻辑的一部分转移到模型的方法中,并为其编写一些测试,包括在标记或图片不可用时引发错误。然后您可以在控制器中解救错误,以显示更友好的错误消息。

pList是一个数组,索引为0、1、2、3、4

你的线路

pList[picture.id-1] += 1
很可能是指一个不存在的索引。例如,如果pList有50个成员,则其索引为0-49。如果上面图片的id是7891,那么它将尝试查找当然不存在的索引7890。这将返回nil,并尝试执行“nil+=1”,这就是错误的来源

也许pList应该是一个由图片ID键控的散列?取决于你想要完成什么。但无论你想做什么,几乎可以肯定的是,在Ruby中有一种不那么冗长的表达方式