Как вызывать метод каждый раз при изменении базы данных - PullRequest
0 голосов
/ 15 апреля 2010

Я пишу приложение на Ruby on Rails и хочу, чтобы метод вызывался каждый раз при изменении базы данных. Можно ли сделать это, не вставляя вызов метода в каждое место, где изменяется база данных?

Ответы [ 4 ]

1 голос
/ 15 апреля 2010

Мне нравится ответ KandadaBooggu, но если вы не хотите использовать AR, вы можете сделать это с помощью Observer.

class AllObserver < ActiveRecord::Observer
  observe :model_a, :model_b

  def after_save(record)
    logger.info("CREATED #{record.class}")
  end

  def after_update(record)
    logger.info("UPDATED #{record.class}")
  end
end

Просто добавьте модели, которые вы хотите наблюдать. В этом примере он будет регистрировать обновления для ModelA и ModelB

1 голос
/ 15 апреля 2010

Если вы хотите войти все модели:

Обезьяна патч ActiveRecord :: Базовый класс.

class ActiveRecord::Base
  after_save :log_something
  after_destroy :log_something

private
  def log_something

  end
end

Для конкретной модели:

class User < ActiveRecord::Base
  after_save :log_something
  after_destroy :log_something

private
  def log_something

  end
end
1 голос
/ 15 апреля 2010

Зависит от базы данных. Многие базы данных имеют очень мощные языки хранимых процедур, которые, помимо прочего, могут вызывать веб-сервисы.

У вас может быть триггер в важных таблицах базы данных для вызова веб-службы ruby, которая вызывает ваш метод.

Или у вас могут быть триггеры, которые обновляют таблицу событий, а затем есть процесс, который отслеживает изменения в этой таблице и затем запускает метод.

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

Все виды опций.

0 голосов
/ 15 апреля 2010

Рассматривали ли вы использование: after_update или before_update в ActiveRecord:

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

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