Как сохранить что-либо в базе данных после неудачных проверок ActiveRecord?

В основном то, что я хочу сделать, - это зарегистрировать действие MyModel в таблице MyModelLog. Вот какой-то псевдокод:

class MyModel < ActiveRecord::Base
  validate :something

  def something
     # test
     errors.add(:data, "bug!!")
  end
end

У меня также есть модель, которая выглядит примерно так:

class MyModelLog < ActiveRecord::Base

  def self.log_something
    self.create(:log => "something happened")
  end

end

Для ведения журнала я попытался:

  • Добавить MyModelLog.log_something в something метод MyModel

  • Вызов MyModelLog.log_something в обратном вызове after_validation для MyModel

В обоих случаях создание откатывается, когда проверка не выполняется, поскольку это в транзакции проверки. Конечно, я также хочу регистрировать неудачные проверки. Я действительно не хочу регистрироваться в файле или где-то еще, кроме базы данных, потому что мне нужны отношения записей журнала с другими моделями и возможность выполнять запросы.

Какие у меня варианты?

5
задан marcgg 7 October 2010 в 11:18
поделиться