Я внедряю систему 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, создающих новые записи и автоматически сохраняемых?
Спасибо,
Исаак