destroy_all and delete_all

Destroy the records by instantiating each record and calling its #destroy method.在删除前实例化每条记录,并回调callback execution.

⚠️ :如果想要快速删除,如果这个动作不涉及associations or callbacks, use delete_all instead. 因为delete_all直接使用SQL DELETE .


豆知识:

Transaction: the process of doing business.

在iterm中输入alias,可以显示所有设置的别名:例子ll的别名是“ls -lh”显示详细的文件内容

语言学习法:

1. 用身体记忆(肌肉记忆,第一步是反复做,而不是试图理解背后的逻辑。学习语言包括配合肢体动作)

2. 跟读。(模仿,纠正)

3. 实际环境中使用。(编程就是直接开发项目,边开发边学。语言就是用,说起来。)

4. 不要被语言本身所限制,语言的目的是沟通,只要符合沟通的目的,可以灵活使用。


Active Record Callbacks:简单学一下:

Callbacks are hooks into the life cycle of an Active Record object that allow you to trigger logic before or after an alteration of the object state.

总共有19种回叫。 如 before_validation, before_create, before_destroy.

继续看api文档:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

callback可以使用类的继承关系, 当子类的一个before_destroy发生时,也会调用父类的before_destroy.

callback有四种method的写法:symbol, callbackobject, inline method(using a process),还有一种不推荐的忽略。

The method reference callbacks work by specifying a protected or private method available in the object, like this(:symbol):

class Topic < ActiveRecord::Base
before_destroy :delete_parents private
def delete_parents
self.class.delete_all "parent_id = #{id}"
end
end

callback-object:

before_save      EncryptionWrapper.new
after_save EncryptionWrapper.new

Ordering callbacks:

有时候,代码在callbacks执行中需要有特别的顺序。否则会报告❌; 需要使用prepend: true

因为关联的关系的回调和删除是首先执行的,之后才会执行before_destroy.

class Topic < ActiveRecord::Base
has_many :children, dependent: :destroy before_destroy :log_children, prepend: true private
def log_children
# Child processing
end
end

Also,there are cases when you want several callbacks of the same type to be executed in order.

如果回调的类型一样,按照代码行顺序执行 .

特例: after_commit,是反过来,先执行最后的method.

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html  文档包括如何debugging callbacks.


12月21日 简单理解Active Recore Callback, destroy_all和delete_all的区别。豆知识(alias),语言学习法(4核心)的更多相关文章

  1. 2016年12月21日 星期三 --出埃及记 Exodus 21:16

    2016年12月21日 星期三 --出埃及记 Exodus 21:16 "Anyone who kidnaps another and either sells him or still h ...

  2. 【12月21日】A股滚动市盈率PE历史新低排名

    2010年01月01日 到 2018年12月21日 之间,滚动市盈率历史新低排名.上市三年以上的公司,2018年12月21日市盈率在300以下的公司. 1 - 厦门象屿(SH600057) - 历史新 ...

  3. 北京Uber优步司机奖励政策(12月21日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. 武汉Uber优步司机奖励政策(12月21日-12.27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. 天津Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. 长沙Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 厦门Uber优步司机奖励政策(12月21日-12.27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 佛山Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 广州Uber优步司机奖励政策(12月21日到12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

随机推荐

  1. Linux基础命令---mktemp

    mktemp 创建临时文件或者目录,这样的创建方式是安全的.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       mk ...

  2. chrome谷歌浏览器用这种方式清除缓存比较方便了,必须是调试模式才行

     chrome谷歌浏览器用这种方式清除缓存比较方便了  PS:必须是调试模式才行,可以不是手机模式 ,有些低版本浏览器可能没有这个功能.   ----------------------------- ...

  3. hue, saturation, and brightness:色调、饱和度和亮度

    色调.饱和度和亮度(hue, saturation, and brightness)以人对红.绿.蓝(RGB)三色组合的感觉为基础.在描述阴极射线管显示器参数时,经常提到这三个专有名词.所有的颜色可以 ...

  4. web前端----jQuery扩展(很重要!!)

    1.jQuery扩展语法 把扩展的内容就可以写到xxxx.js文件了,在主文件中直接导入就行了. 用法1.$.xxx() $.extend({ "GDP": function () ...

  5. PT100高精度测温电路 AD623+REF3030(转)

    源: PT100高精度测温电路 AD623+REF3030(很稳定)

  6. mysql主备切换[高可用]

    到这一步的时候, 是主备部署已经处理好, 请关注:mysql主备部署[高可用] 这次使用的是keepalived-1.2.22.tar.gz版, 官网地址:keeplived官网 笼统知识请自行查询百 ...

  7. bzoj 1179 [APIO 2009]Atm(APIO水题) - Tarjan - spfa

    Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一 ...

  8. Pycharm 2017 激活码

    Pycharm 2017 激活码 server选项里边输入:  http://idea.liyang.io 我是通过这个成功的

  9. Java序列化流-ObjectOutputStream、ObjectInputStream

    Java对象流的基本概念: 实例代码: 实体类User: import java.io.Serializable; /** * @author zsh * @company wlgzs * @crea ...

  10. Java集合总结(List、Map、Set)

    集合的引入 当我们有种需求,需要存储多个元素的结构时,我们前面讲过数组,数组可以存储.但是数组也有它的弊端,使用的时候,必须先定义好长度,也就是数组的长度是固定,不能根据我们的需求自动变长或者变短. ...