aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/locking
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2018-03-04 00:39:53 +0900
committerRyuta Kamizono <kamipo@gmail.com>2018-03-05 09:52:58 +0900
commitea45d56d3d23e703b2866524202649e333fd7408 (patch)
tree5916e79901652db4f51e2174dbdf6d1c878d79c0 /activerecord/lib/active_record/locking
parent37984353f272efb12cb1d008cb231a1f1e56524a (diff)
downloadrails-ea45d56d3d23e703b2866524202649e333fd7408.tar.gz
rails-ea45d56d3d23e703b2866524202649e333fd7408.tar.bz2
rails-ea45d56d3d23e703b2866524202649e333fd7408.zip
Introduce `_delete_record` and use it for deleting a record
Diffstat (limited to 'activerecord/lib/active_record/locking')
-rw-r--r--activerecord/lib/active_record/locking/optimistic.rb22
1 files changed, 9 insertions, 13 deletions
diff --git a/activerecord/lib/active_record/locking/optimistic.rb b/activerecord/lib/active_record/locking/optimistic.rb
index c2f740a1e0..29735f5490 100644
--- a/activerecord/lib/active_record/locking/optimistic.rb
+++ b/activerecord/lib/active_record/locking/optimistic.rb
@@ -112,24 +112,20 @@ module ActiveRecord
end
def destroy_row
- affected_rows = super
+ return super unless locking_enabled?
- if locking_enabled? && affected_rows != 1
- raise ActiveRecord::StaleObjectError.new(self, "destroy")
- end
+ locking_column = self.class.locking_column
- affected_rows
- end
+ affected_rows = self.class._delete_record(
+ self.class.primary_key => id_in_database,
+ locking_column => read_attribute_before_type_cast(locking_column)
+ )
- def relation_for_destroy
- relation = super
-
- if locking_enabled?
- locking_column = self.class.locking_column
- relation = relation.where(locking_column => read_attribute_before_type_cast(locking_column))
+ if affected_rows != 1
+ raise ActiveRecord::StaleObjectError.new(self, "destroy")
end
- relation
+ affected_rows
end
module ClassMethods