diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 2375211577fa1f4dab08e400551e453b0c948495..7a34e345a270a4c79e91723a56244a28e781caf2 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -2602,7 +2602,7 @@ def delete # be made (since they can't be persisted). def destroy unless new_record? - arel_table.where(arel_table[self.class.primary_key].eq(id)).delete + arel_table(true).where(arel_table[self.class.primary_key].eq(id)).delete end freeze @@ -2904,7 +2904,7 @@ def create_or_update def update(attribute_names = @attributes.keys) attributes_with_values = arel_attributes_values(false, false, attribute_names) return 0 if attributes_with_values.empty? - arel_table.where(arel_table[self.class.primary_key].eq(id)).update(attributes_with_values) + arel_table(true).where(arel_table[self.class.primary_key].eq(id)).update(attributes_with_values) end # Creates a record with values matching those of the instance attributes @@ -2991,8 +2991,9 @@ def attributes_protected_by_default default end - def arel_table - @arel_table = Arel::Table.new(self.class.table_name) + def arel_table(reload = nil) + @arel_table = Relation.new(self, self.class.table_name) if reload || @arel_table.nil? + @arel_table end # Returns a copy of the attributes hash where all the values have been safely quoted for use in diff --git a/activerecord/lib/active_record/locking/optimistic.rb b/activerecord/lib/active_record/locking/optimistic.rb index bc22c2a5110b1520d4d8622ae94f15b812bb891a..4e833ec871ee2612155bb6937fbb61ed1ef6a63e 100644 --- a/activerecord/lib/active_record/locking/optimistic.rb +++ b/activerecord/lib/active_record/locking/optimistic.rb @@ -89,7 +89,7 @@ def update_with_lock(attribute_names = @attributes.keys) #:nodoc: attribute_names.uniq! begin - affected_rows = arel_table.where( + affected_rows = arel_table(true).where( arel_table[self.class.primary_key].eq(quoted_id).and( arel_table[self.class.locking_column].eq(quote_value(previous_value)) ) @@ -116,7 +116,7 @@ def destroy_with_lock #:nodoc: lock_col = self.class.locking_column previous_value = send(lock_col).to_i - affected_rows = arel_table.where( + affected_rows = arel_table(true).where( arel_table[self.class.primary_key].eq(quoted_id).and( arel_table[self.class.locking_column].eq(quote_value(previous_value)) )