2011-10-14 52 views
0

這是在我的控制器Rails的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 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]} 

時,這就是所謂的

NoMethodError在SearchController#這個錯誤出現導致

你有一個零對象時你沒想到它! 您可能預期了Array的一個實例。 評估爲零時出錯+ Rails.root:/用戶/ kevinmohamed/SnapSort /服務器

應用程序跟蹤|框架跟蹤|充分跟蹤 應用程序/控制器/ search_controller.rb:31:在每個block in results' app/controllers/search_controller.rb:29:in」 應用程序/控制器/ search_controller.rb:29:在`結果

31是plist中[picture.id-1] + = 1, 29是@ pictures.each do | picture |,爲什麼會發生這種錯誤

+0

請格式化您的問題 – apneadiving

回答

1

plist中是一個數組,用0,1,2,3,4 ...

你的線

pList[picture.id-1] += 1 

可能指的是不存在的索引編入索引。例如,如果pList有50個成員,它有0-49的缺陷。如果上述圖片的ID是7891,那麼它將嘗試找到當然不存在的7890的索引。這將返回零,並嘗試執行「nil + = 1」,這是您的錯誤來自哪裏。

也許pList應該是一個哈希圖片ID鍵控的哈希?取決於你想要完成的事情。但是無論你想要做什麼,幾乎可以肯定的是,在Ruby中表達它的方式不會那麼冗長。

+0

謝謝,這個作品 – Kevin

0

當您正在迭代的內容在不期望出現錯誤時會產生一個零錯誤。你的控制器中有很多代碼。我建議將這些邏輯中的一部分轉化爲模型的方法,併爲其編寫一些測試,包括在標籤或圖片不可用時引發錯誤。然後,您可以挽救控制器中的錯誤以顯示更友好的錯誤消息。