Настройка обратного вызова ActiveRecord от другой модели - PullRequest
1 голос
/ 20 сентября 2010

Допустим, мне нужны простые модели First и Second, и существует отношение один к одному из Second с использованием belongs_to :first.Теперь я хочу сделать что-то с Second, когда First сохранено.Но я не хочу настраивать обратный вызов after_save в First, чтобы иметь дело с Second.

Я хочу, чтобы мои модели были чистыми и максимально не знали друг о друге.Я всегда следую передовым методам инкапсуляции объектов, и это всегда делает мою жизнь проще.

Естественно, поскольку after_save является методом класса, я попытался настроить этот обратный вызов в Second, например:это:

class Second < ActiveRecord::Base

  belongs_to :first

  First.after_save do |record|
    if that = Second.find_by_first_id(record.id)
      # grow magic mushrooms here...
    end
  end
end

, но это не работает, этот обратный вызов никогда не выполняется и не возникает ошибка.

Ответы [ 3 ]

4 голосов
/ 20 сентября 2010

Вы можете сделать это через наблюдателя:

class FirstObserver < ActiveRecord::Observer
  def after_save(first)
    ...
  end
end

Не забудьте включить наблюдателя в вашем config/application.rb:

config.active_record.observers = :first_observer
3 голосов
/ 20 сентября 2010

Лучше всего настроить наблюдатель , что-то вроде «FirstObserver» и написать туда обратный вызов после сохранения.

0 голосов
/ 20 сентября 2010

Попробуйте это:

First.class_eval do
  def after_save record
     #mashrooooms
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...