私は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')
コールバックも呼び出す