2011-05-05 15 views
0

給定一個模型:如何構建ToyS​​tore模型的Observer?

class User 
    include Toy::Store 
    attribute :name 
end 

我可以使用ActiveModel::Observer建立一個觀察者?我刪除了ActiveRecord框架,因爲我沒有在我的Rails應用程序中使用它。

添加喜歡的觀察員:

class UserObserver < ActiveModel::Observer 
    def after_save(model) 
    puts "Hello!" 
    end 
end 

似乎並沒有工作。在應用程序配置中包含觀察者不起作用,因爲ActiveRecord框架已被刪除。

+0

用戶僅僅是一個就Rails而言,直接瞭解了Ruby類,所以我可以看到內置的觀察者如何工作。你可能必須自己寫。 – 2011-05-05 13:49:01

+0

你有沒有想過這個? – hornairs 2013-01-23 22:42:35

回答

0

我也想用玩具::商店也觀察員。事實證明,正常的對象生命週期事件,比如創建,保存,更新和刪除,這些事件在Rails中是可觀察的,因爲ActiveRecord是可觀察的。玩具店對象是ActiveModel對象,並沒有相同的鉤子。我在Why Toy Store Doesn't Work With Observers的博客文章中深入探討了這個主題。

但是,好消息,仍然有可能使用觀察者與玩具商店,它只是由你來實施它們。我還做了一個博客帖子上How to Use Observers With Toy::Store ,但這裏是它的要點是:你的玩具對象,在這種情況下User,必須包括ActiveModel::Observing,當它是適合該模式必須觸發事件:

class User 
    include Toy::Store 
    attribute :name 
    after_save :notify_observers_save_occured 

    private 

    def notify_observers_save_occured 
    self.class.notify_observers(:after_save, self) 
    end 

end