2016-02-29 17 views
0

我們的對象有幾個定義的生命週期回調方法。在每個觸發回調的方法中,都會創建一個Event對象用於跟蹤目的。生命週期事件定義如下:如何將一個對象從run_callbacks傳遞到after_callback作用域?

@@LIFECYCLE_CALLBACKS = [ 
    :send_email, 
    :start_time, 
    :end_time, 
    :review 
].each do |callback| 
    define_model_callbacks callback 
    define_method callback do 
     run_callbacks callback do 
     #The Event object is created here 
     track_lifecycle_action callback 
     end 
    end 
    end 

在一些生命週期方法中,我需要向Event對象添加其他信息。我想塊連接到產生回調是這樣的:

after_send_email :add_additional_details_to_event 

如何修改我的代碼總是傳遞是run_callbacks中創建的事件對象塊成塊的情況下由after_callback運行回電話?我認爲我不認爲self.events.last將始終返回正確的Event對象。

回答

0

我花了一點時間思考這一點,最好的解決方案,我想出來的這個樣子的:

@@LIFECYCLE_CALLBACKS = [ 
    :send_email, 
    :start_time, 
    :end_time, 
    :review 
].each do |callback| 
    define_model_callbacks callback 
    define_method callback do 
     @event = track_lifecycle_action callback 
     run_callbacks callback do 
     end 
    end 
    end 

現在,當我註冊的方法有類似的評論回調

after_review :print_event 

我已經意識到傳遞給回調宏塊都共享同一個實例的範圍,所以我可以做這樣的事情

def print_event 
    puts @event 
end 

這是危險的嗎?有沒有更完美的方式來完成我的任務?

相關問題