2013-03-04 27 views
1

我新的軌道,並閱讀一些Rails代碼:https://github.com/discourse/discourse/blob/master/app/models/user_action_observer.rb#L1從軌道觀察者的這段代碼中我們可以知道什麼?

class UserActionObserver < ActiveRecord::Observer 
    observe :post_action, :topic, :post, :notification, :topic_user 

    def after_save(model) 
    puts 'do something' 
    end 
end 

我們可以知道,從這個代碼?例如

  1. 因爲它的名字是UserActionObserver,所以它是一個觀察者模型UserAction
  2. 它觀察到::post_action, :topic, :post, :notification, :topic_user,這些字段是什麼意思?將被創建或只是對其他模型的某些字段的一些引用?
  3. 什麼時候會調用方法after_save,什麼是model參數?

回答

2

觀察者類名稱可以是任何名稱。真正重要的是這一行

observe :post_action, :topic, :post, :notification, :topic_user 

其觀察和下PostAction,主題帖子,通知創建的對象TopicUser

after_save創建和更新記錄後調用。傳遞的參數是涉及的實際對象,因此它可以是任何觀察模型的實例。使用model作爲參數名字有點誤導,所以你應該是更改爲類似record

UPDATE:從API

觀察員將在默認情況下被映射到與它們共享一個名稱的類。因此CommentObserver將被綁定到觀察Comment,ProductManagerObserver到ProductManager等。如果您想以不同於您感興趣觀察的類的方式命名您的觀察者,則可以使用Observer.observe類方法,該方法將具體類(Product)或該類的一個符號(:product)

+0

' :post_action'表示文件'post_action.rb'或者它將被翻譯成類名'PostAction'? – Freewind 2013-03-04 05:13:09

+0

請看更新後的答案:) – jvnill 2013-03-04 05:25:09

相關問題