4
有沒有可能在類方法上使用ActiveSupport::Callbacks
?更具體地說,在下面的模塊中,你會在哪裏放include ActiveSupport::Callbacks
使define_callbacks
和run_callbacks
共享相同的狀態?ActiveSupport ::類方法的回調
module Handler
extend ActiveSupport::Concern
# If you put it here, define_callbacks is defined but run_callbacks is not
# include ActiveSupport::Callbacks
included do
class_eval do
define_callbacks :handle
end
end
module ClassMethods
# If you put it here, run_callbacks is defined but define_callbacks is not
# include ActiveSupport::Callbacks
def handle(task)
run_callbacks :handle do
p task
end
end
end
end
class HandlerExample
include Handler
end
更新
如果有可能,我一直無法確定,可以肯定的是不是ActiveSupport::Callbacks
是專爲。最好在#handle
中創建一個無狀態實例對象。
我確實嘗試將它們放在本徵類中,也沒有工作。查看對象ID似乎'ActiveSupport :: Concern'和'ActiveSupport :: Callbacks'交互的方式對類方法來說效果不好。今天早些時候,我得出了與您所建議的相同的結論,併爲處理程序創建了一個實例對象。這是一種浪費,因爲除了任務外沒有任何狀態,但它比我更容易構建一個適用於類方法的回調實現。 – Sim