这是我的控制器
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]}
端
调用此错误时会出现此错误
SearchController中的NoMethodError#results
当你没想到它时,你有一个零对象! 您可能期望一个Array实例。 在评估nil。+时发生错误 Rails.root:/ Users / kevinmohamed / SnapSort / server
应用程序跟踪|框架跟踪|完整追踪
app / controllers / search_controller.rb:31:block in results'
app/controllers/search_controller.rb:29:in
每个'
app / controllers / search_controller.rb:29:在`results'
31是pList [picture.id-1] + = 1,29是@ pictures.each do | picture |,为什么会出现这个错误
答案 0 :(得分:1)
pList是一个数组,索引为0,1,2,3,4 ...
你的行
pList[picture.id-1] += 1
可能是指不存在的索引。例如,如果pList有50个成员,则它具有0-49的不足。如果上面图片的id是7891,那么它将尝试找到7890的索引,当然不存在。这将返回nil,并尝试执行“nil + = 1”,这是您的错误来源。
也许pList应该是由图片ID键入的哈希?取决于你想要完成的事情。但无论你想做什么,几乎可以肯定的是,在Ruby中表达它的方式也不那么冗长。
答案 1 :(得分:0)
当你正在迭代的东西产生了一个nil时,就会发生这个错误。你的控制器中有很多代码。我建议将一些逻辑转移到模型的方法中并为其编写一些测试,包括在标签或图片不可用时引发错误。然后,您可以挽救控制器中的错误,以显示更友好的错误消息。