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. AppiumDriverLocalService 启动appium控制台不显示日志以及把日志保存到本地

    import java.io.File; import java.io.OutputStream; import java.lang.reflect.Field; import java.util.A ...

  2. python的subprocess的简单使用和注意事项

    subprocess是python在2.4引入的模块, 主要用来替代下面几个模块和方法: os.systemos.spawn*os.popen*popen2.*commands.* 可以参考PEP32 ...

  3. Linux基础命令---diff

    diff 逐行比较两个文本文件,把文件的差异显示到标准输出.如果要指定要比较目录,那么diff命令会比较目录中相同文件名的文件,不会比较子目录. 此命令的适用范围:RedHat.RHEL.Ubuntu ...

  4. jpeg exif

    公司项目需要在jpeg图片里面添加exif信息,同事完成了这部分代码:但是有些手机兼容性有问题: libexif 地址:http://libexif.sourceforge.net/ 注意相关资料来之 ...

  5. camera按键采集图像及waitKey的用法

    前言 项目需要通过摄像头采集图像并保存,主要是用于后续的摄像头标定.实现过程其实很简单,需要注意一些细节. 系统环境 系统版本:ubuntu16.04:opencv版本:opencv2.4.13:编程 ...

  6. c++第五天:默认初始化

    1.算数类型.(整型和浮点型) 类型决定了数据所占的比特数以及该如何解释这些比特的内容. 练习2.1... 各种类型在计算机中所占的比特数不同,解释方法不同.有符号要花费一个比特存储符号,最大正值要比 ...

  7. Sybase 删除表的某列

    Sybase 删除表的某列 Sybase 删除表的某列sql: --想删除字段temp1(该字段的所有值已置为null) alter table nh_bill_detail drop temp1;

  8. c++获取时间戳

    vc获取时间戳的代码如下: SYSTEMTIME st; }; GetLocalTime(&st); // vc专用 _snprintf_s(ts, sizeof(ts), "%4d ...

  9. PHP 开发 api 接口安全验证

    原文链接:http://blog.csdn.net/li741350149/article/details/62887524

  10. Python3基础 __repr__ 实例对象的名字,可以显示信息

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...