「专题:源码分析」Acts_as_paranoid

2013/12/23 12:28
阅读数 7

@小子,是个爱钻研爱学习的小伙伴,这是他带来的分享,一些Rails开源gem的源码分析和比较。


因为微信代码格式问题,更多的内容请点击「原文阅读」,这里只贴部分内容。


---正文:


  • acts_as_paranoid

它的作用就是假删除,在实际中还是会很有用的。有一天,客户说,她刚才误删了一个东西,要你把它找回来,这个时候它就派上用场了。

回收站或者垃圾箱也是假删除的典型应用.假如一个邮箱系统中,用户把邮件删除掉,这个时候这些邮件并没有被彻底删除掉,它其实是先到了垃圾箱中,如果要彻底删除它,请到垃圾箱那里再删一次吧

其实它实际上不删除数据中的数据,只不过是隐藏起来而已,只要让用户看不到,它就等于删除了,实际上,要还原的话修改一下数据库就可以回来了

它实现的原理很简单,只不过是用一个标志来实现隐藏数据,在数据表中加一个字段,把它的值改一下,它就删除了(隐藏),修改回来,它又出现了

它的目的就是保护数据的安全,让用户能在误操作的情况下也能恢复数据。但是缺点也很明显,由于不是真正的删除,数据库中仍然保留着那条数据,数据库会越来越庞大,垃圾的信息也是越来越多

默认情况下用“deleted_at”这个字段,用一个参数column来指定,它可以有三种类型boolean, string, time,这三个类型用column_type参数来指定

boolean:布尔型,被删除时值为true

string:字符串型,被删除时值为”deleted”,这个值可以用deleted_value参数来指定

time:时间型,被删除时值为当前时间(删除操作的时间)

以上三个类型未删除时值都为NULL(nil)。建议使用time类型

分析该gem的源码可以懂得下面的知识

  1. attr_protected的使用

  2. 写一个callback

  3. included_modules的用法

  4. scoped unscoped的用法

  5. activerecord/Reflection的用法

  6. 自己写一个validator

  7. class_attribute的用法

  8. activerecord/relation中klass的用法

详细内容:请点击原文阅读

本文分享自微信公众号 - 觉学社(WakerGroup)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部