Fix bug allowing created elements to reference deleted ones
[rails.git] / app / models / relation.rb
index 3d3c317aa74722677266db9ca729a115c2aaeb59..cb9621822ba63cefd1349318f28c8947765ec829 100644 (file)
@@ -246,8 +246,10 @@ class Relation < ActiveRecord::Base
 
       # use reflection to look up the appropriate class
       model = Kernel.const_get(m[0].capitalize)
-      # get the element with that ID
-      element = model.find_by(:id => m[1])
+      # get the element with that ID. and, if found, lock the element to
+      # ensure it can't be deleted until after the current transaction
+      # commits.
+      element = model.lock("for share").find_by(:id => m[1])
 
       # and check that it is OK to use.
       unless element && element.visible? && element.preconditions_ok?