我讀的Rails 3路書,並在該點糊塗了:的has_many和:after_add /:before_add =>回調<<和創建方法
:after_add =>回調 後,一個叫記錄通過< <方法添加到集合中。不會調用before_add回調,但實際上它在呼喚:不被收集的 創建方法
據我瞭解book.chapters.create(「第一章」稱號)觸發。
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')
還調用回調
在聲明中你有after_add和代碼中你有before_add這是一個錯誤嗎? –
問題是錯誤的還是你理解問題? –
我在Rails指南中看不到這種行爲。自書寫完以後,這種行爲可能會發生變化。 –