A transaction acts on a single database connection. If you have multiple class-specific databases, the transaction will not protect interaction among them. One workaround is to begin a transaction on each class whose models you alter:
Student.transaction do Course.transaction do course.enroll(student) student.units += course.units end end
This is a poor solution, but fully distributed transactions are beyond the scope of ActiveRecord.