Обозреватель использует стандартные обратные вызовы AR, поэтому он не вызовет ваш стандартный ответ по умолчанию.
Я думаю, что, скорее, придумывая новый обратный вызов (и поведение AR по умолчанию для monkeypatch AR), возможно, вам следует использовать AR.Сложно сказать что ты хочешь.Можете ли вы привести пример использования?
попробуйте, может быть, что-то вроде
before_save MyCallbacks.new, :if => :some_condiditons_meet?
class MyCallbacks
def before_save(object)
sophistcated_use(object) if object.valid?
damn_have_it?
end
end
, оно на самом деле охватывает поведение наблюдателя на каком-то уровне
<- update ->
Вся цепочка обратного вызова вызова save, save !, или destroy выполняется внутри транзакции.Это включает в себя after_ * хуки.Если все идет хорошо, команда COMMIT выполняется после того, как цепочка была завершена.
Я думаю, что вся идея ОДНОГО наблюдателя - не лучшее решение.После того, как появится больше зависимостей, ваша логика будет очень сложной.Определение собственных оболочек транзакций - это хорошо, но вам это действительно нужно?Возможно, вы можете изменить модель для достижения этой цели, не записывая собственный случай транзакции.
Например,
class Friendship < ActiveRecord::Base
belongs_to :user
has_many :users, :through => :groups
after_validation :save_my_records
def save_my_records
user.friend.history.save
user.history.save
end
end
Где друг - это объект => есть собственный наблюдатель, а история - это объект => естьсобственный наблюдатель
Это очень абстрактно, но без вашего кода я понятия не имел, как привести какой-то конструктивный пример, также after_validation - не лучшее место для сохранения чего-либо, я думаю.
также notify_observer звучит как хакмне: -)