萬惡的"delete",慎用數組的delete

一直以來我的網站存在着一個令人很崩潰的問題。就是用戶上傳的圖片會丟失。而且是連帶相冊一起丟失。開始還以爲是什麼地方誤刪了,衝突了。查了很久很久無果。關鍵是這個BUG並不是一定出現。而且,我測試時就從來沒碰到過。
昨天一個用戶剛註冊,開始上傳圖片。我就密切注意。過了一會兒,果不然,相冊丟失了。很納悶。打開production.log看了N久。沒發現異常啊。注:裏面我沒加sql的log。太多了。
但是這個問題很鬱悶,而且已經鬱悶很長一段時間了。這個用戶還好。又繼續新建相冊,傳照片。一會兒。又沒了。這就鬱悶了。我就不得不重新開了sql的log。果不然,確實有album destroy的記錄。很奇怪。
於是我備份了該用戶消失的相冊。(手快)自己回覆數據來做測試。(因爲我上傳從來不出現。RP啊RP)
通過看sql的log。和每個頁面調用。(tail 就是好用啊)終於發現了居然是載入用戶首頁的時候相冊被刪除的。太奇怪了。怎麼會這樣。打開controller。裏面有一句:
@photos = @lovetree.show_photos(current_user)

那肯定是該句的問題。遂打開Lovetree模型。找到show_photos。才恍然大悟!
由於用戶主頁回去把用戶設了訪問權限的相冊移開。我用的方法是先找到所有屬於該用戶的相冊。然後:
albums.each{|a| albums.delete(a) unless a.authorize(user)}

本來意思是如果用戶設了權限,就把該相冊從albums數組中刪除掉。最後留下的就顯示。結果造成了並不是數組中去刪除相冊,而是直接把該相冊也刪除了。
萬惡的delete啊。最後改成albums - [a]就對了。
太痛苦的經歷了。告誡大家一下!慎用數組delete。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章