万恶的"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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值