Может ли модель рельсов наблюдать за объектом? - PullRequest
2 голосов
/ 08 июля 2010

Я пытаюсь, чтобы модель рельсов наблюдала за другим объектом (который действует как субъект). Я видел, что в ActiveRecord::Base есть метод update (который имеет другую семантику), но для использования модуля Observable мне нужно реализовать метод update в моей модели, чтобы я мог получать уведомления изменений в теме.

Есть мысли о том, как этого достичь?

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Возможно, вы захотите использовать обычный Observer, который будет получать обратные вызовы событий, когда что-то случится с наблюдаемой моделью.

Зачем вам нужно включать функциональность вашего наблюдателя в другую модель?

Вам лучше поместить события / обратные вызовы в наблюдателя и вызывать все необходимые функции в качестве вспомогательного метода в другой модели, а не делать вашу модель наблюдателем.код

class User < ActiveRecord::Base
end

class UserObserver < ActiveRecord::Observer
  observe :user

  def after_save(user)
    MyHelperClass.do_some_stuff_for_user(user)
  end
end

class MyHelperClass
  def self.do_some_stuff_for_user(user)
    puts "OMG I just found out #{user.name} was saved so I can do stuff"
  end
end
0 голосов
/ 10 июля 2010

Похоже, что вы можете переопределить значение по умолчанию update, поставляемое с ActiveRecord, чтобы оно могло получать уведомления от субъектов (при условии, что вы смешали в Observable). Процедура для того, чтобы сделать что-то подобное, описана в книге «Pro ActiveRecord», опубликованной APress (глава 5, «Бонусные функции»).

Он включает использование alias_method / alias_method_chain с некоторым метапрограммированием ...

Я еще не пробовал это лично, но просто оставляю здесь записку на случай, если кто-то еще будет проинструктирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...