sim*_*imo 5 activerecord ruby-on-rails-3
我需要知道何时使用:dependent => :destroy_all以及何时使用:dependent => :destroy
如果我的模型有很多儿童模特,我会用到:dependent => :destroy什么?它会破坏第一个儿童模型吗?
这行代码是错误的:
has_many books, :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)
它是这样的:
has_many books, :dependent => :destroy_all
Run Code Online (Sandbox Code Playgroud)
?
这将摧毁所有书籍。他们都。
has_many books, :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)
要记住的一件重要事情是,这:dependent => :destroy将导致#destroy在每个关联的 Books 中调用该方法。通过调用#destroy每本书,将为每本书执行anybefore_destroy或after_destroy回调。
当然,如果您有很多相关书籍,则此过程可能会很昂贵。
将:destroy_all是无效的,也许你在想些什么:delete_all。与:delete_all(而不仅仅是:destroy)的区别在于 Rails 将发出单个 SQL 语句来删除所有相关的书籍记录。不会#destroy对任何 Book 记录调用任何方法,也不会执行before_destroy或after_destroy回调。
好处是单个 SQL 语句从数据库中删除记录比调用#destroy每条记录的效率高很多倍。
了解这一点非常重要。如果您*_destroy在 Book 模型上有任何回调,您应该知道定义:dependent => :delete_all将产生忽略您在 Book 模型上定义的任何回调的效果。
| 归档时间: |
|
| 查看次数: |
5427 次 |
| 最近记录: |