0
我的任務是爲Rails應用程序(Foreman)實現一個非常基本的功能請求,並且偶然發現了一個似乎既非常基本又非常流行的問題。從Java背景來看,我發現回調不像我通常所期望的那樣工作。Ruby on Rails - 回調
通常在Java中使用偵聽器時,可以爲事件訂閱任意代碼片段,並且當事件觸發時,對象遍歷偵聽器並通知每個偵聽器。一個非常簡單的例子是:
public class Foo {
private List<FooListener> foo_list = new List<FooListener>();
public void add_foo_listener(FooListener fooListener){
this.foo_list.add(fooListener);
}
private void on_foo_thing(){
foreach(foo : foo_list) {
fooListener.notify();
}
}
}
所以,你可以通過調用「add_foo_listener(FooListener的)」的時候,on_foo_thing()方法被調用,將被通知增加從外部類然而,許多聽衆 - 無需任何修改原創課。
ruby/rails中是否有類似的東西?我想勾入類具有以下掛鉤定義:
define_model_callbacks :build, :only => :after
define_model_callbacks :provision, :only => :before
# Custom hooks will be executed after_commit
after_commit :build_hooks, :if => :persisted?
def build_hooks
return unless respond_to?(:old) && old && (build? != old.build?)
if build?
run_callbacks :build do
logger.debug { "custom hook after_build on #{name} will be executed if defined." }
end
else
run_callbacks :provision do
logger.debug { "custom hook before_provision on #{name} will be executed if defined." }
end
end
end
可能重複[我怎樣使用Ruby元編程將回調添加到Rails模型?](http://stackoverflow.com/questions/12084234/how-do-i-use-ruby-metaprogramming-to-add-callbacks-to-a-rails-model ) – Benj
如果我錯了,請糾正我,但從我對ActiveSupport :: Concern的理解中,我將不得不編輯原始類定義以包含我的關注類,這個答案似乎可以重新執行。 – HeWhoWas