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:inblock 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中有一种不那么冗长的表达方式