我正在阅读 Rails 3 Way 书,当时感到困惑:
:after_add => 回调 在通过 << 方法将记录添加到集合后调用。不是由集合的 create 方法触发的
据我了解 book.chapters.create(title: 'First Chapter') 不会调用 before_add 回调,但实际上它正在调用。
class Book < ActiveRecord::Base
attr_accessible :title
has_many :chapters, :before_add => :add_chapter
private
def add_chapter(chapter)
logger.error('chapter added to book')
end
end
class Chapter < ActiveRecord::Base
belongs_to :book
attr_accessible :title
end
在控制台中(缩小)
> b = Book.first
Book Load (0.1ms) SELECT "books".* FROM "books" LIMIT 1
> b.chapters.create(title: 'Last Chapter')
begin transaction
chapter added to book
INSERT INTO "chapters" ....
commit transaction
在这里你可以看到after_add
回调是为 调用的create
。
我误解了什么吗?
编辑
b.chapters.new(title: 'New Chapter')
b.chapters.build(title: 'New Chapter')
还调用回调