Как построить модель Observer для ToyStore? - PullRequest
0 голосов
/ 05 мая 2011

Учитывая модель:

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 удалена.

Ответы [ 2 ]

0 голосов
/ 06 марта 2013

Я также хотел использовать Observers с Toy :: Store. Оказывается, что обычные события жизненного цикла объекта, такие как создание, сохранение, обновление и удаление, наблюдаемые в Rails, наблюдаются благодаря ActiveRecord. Объекты магазина игрушек являются объектами ActiveModel и не имеют одинаковых зацепок. Я глубоко погрузился в эту тему в своем блоге на Почему магазин игрушек не работает с наблюдателями .

Но, хорошая новость, все еще можно использовать наблюдателей с магазином игрушек, только вы можете их реализовать. Я также сделал пост в блоге на Как использовать 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
0 голосов
/ 05 мая 2011

Вы можете наблюдать только потомков ActiveModel.Они не обязательно должны быть объектами ActiveRecord, хотя, как вы можете прочитать в статье Иегуды Каца: ActiveModel заставляет любой рубиновый объект чувствовать себя как ActiveRecord

...