`

Rails2中的诡异(2)

阅读更多
注:此法不可取

应用场景:
我有一个分类和分类中的图书,我要在删除分类时,把图书也一起删除掉。
在Rails中有自带的has_many :books, :dependent => :destroy

不过我不用它自带的这个,自己实现before_destroy的回调,这样写:
class Category < ActiveRecord::Base
has_many :books
before_destroy :clear_all_books

def clear_all_books
  self.books.delete_all
end


表面上看,以上代码没有什么问题吧,但是在删除分类后,并没有把它所属的图书也删除,而是将表books中相关的记录的category_id置为null
,要实现的话这样:

def clear_all_books
  self.books.find(:all).each{|book|book.destroy}
end

另外这个has_many :books, :dependent => :destroy声明还有一个问题:
如果我在Model Book中有关于destroy的回调,那么在Model Category这一端删除分类时,虽然因为:dependent => :destroy把相关联的book也删除了,但是不会执行Model Book的中estroy的回调。

这问题真是的!!!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics