Как я могу гарантировать заказ обратного вызова before_destroy в автосохраненных записях? - PullRequest
2 голосов
/ 27 января 2012

Я внедряю систему Audit Trail-Esque в моем приложении rails3; по сути, я хочу точно знать, когда мои пользователи вносят какие-либо изменения.

В настоящее время сталкиваюсь с проблемой, когда у меня есть две модели - от одного ребенка до другого. Псевдокод следует:

class Audit;end #this is a straightforward data-storing model, trust me!  
class Parent
  has_many :children, :dependent => :destroy
  before_destroy :audit_destroy
  def audit_destroy
     Audit.create(:metadata => "some identifying data")
  end
end
class Child
  belongs_to :parent
  before_destroy :audit_destroy
  def audit_destroy
     Audit.create(:metadata => "some identifying data")
  end
end

При звонке

Parent.destroy

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

Это, однако, не гарантируется, поскольку я ничего не сказал явно о порядке создания записей аудита. Хотя это, как правило, справедливо, я подтвердил, что иногда порядок создания записей аудита инвертируется.

Есть ли какая-то магия в недрах ActiveRecord, связанная с упорядочением обратных вызовов before_destroy, создающих новые записи и автоматически сохраняемых?

Спасибо, Исаак

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