Skip to content

Commit

Permalink
[Active Record] Renamed private methods create_record and update_record
Browse files Browse the repository at this point in the history
 This is to ensure that they are not accidentally called by the app code.
 They are renamed to _create_record and _update_record respectively.
 Closes rails#11645
  • Loading branch information
prathamesh-sonpatki committed Feb 20, 2014
1 parent 25ce856 commit 9694f86
Show file tree
Hide file tree
Showing 9 changed files with 37 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,11 @@ def build(attributes = {}, &block)
end

def create(attributes = {}, &block)
create_record(attributes, &block)
_create_record(attributes, &block)
end

def create!(attributes = {}, &block)
create_record(attributes, true, &block)
_create_record(attributes, true, &block)
end

# Add +records+ to this association. Returns +self+ so method calls may
Expand Down Expand Up @@ -452,13 +452,13 @@ def merge_target_lists(persisted, memory)
persisted + memory
end

def create_record(attributes, raise = false, &block)
def _create_record(attributes, raise = false, &block)
unless owner.persisted?
raise ActiveRecord::RecordNotSaved, "You cannot call create unless the parent is saved"
end

if attributes.is_a?(Array)
attributes.collect { |attr| create_record(attr, raise, &block) }
attributes.collect { |attr| _create_record(attr, raise, &block) }
else
transaction do
add_to_target(build_record(attributes)) do |record|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ def writer(record)
end

def create(attributes = {}, &block)
create_record(attributes, &block)
_create_record(attributes, &block)
end

def create!(attributes = {}, &block)
create_record(attributes, true, &block)
_create_record(attributes, true, &block)
end

def build(attributes = {})
Expand Down Expand Up @@ -52,7 +52,7 @@ def set_new_record(record)
replace(record)
end

def create_record(attributes, raise_error = false)
def _create_record(attributes, raise_error = false)
record = build_record(attributes)
yield(record) if block_given?
saved = record.save
Expand Down
4 changes: 2 additions & 2 deletions activerecord/lib/active_record/attribute_methods/dirty.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,11 @@ def save_changed_attribute(attr, value)
end
end

def update_record(*)
def _update_record(*)
partial_writes? ? super(keys_for_partial_write) : super
end

def create_record(*)
def _create_record(*)
partial_writes? ? super(keys_for_partial_write) : super
end

Expand Down
4 changes: 2 additions & 2 deletions activerecord/lib/active_record/callbacks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -302,11 +302,11 @@ def create_or_update #:nodoc:
run_callbacks(:save) { super }
end

def create_record #:nodoc:
def _create_record #:nodoc:
run_callbacks(:create) { super }
end

def update_record(*) #:nodoc:
def _update_record(*) #:nodoc:
run_callbacks(:update) { super }
end
end
Expand Down
2 changes: 1 addition & 1 deletion activerecord/lib/active_record/locking/optimistic.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def increment_lock
send(lock_col + '=', previous_lock_value + 1)
end

def update_record(attribute_names = @attributes.keys) #:nodoc:
def _update_record(attribute_names = @attributes.keys) #:nodoc:
return super unless locking_enabled?
return 0 if attribute_names.empty?

Expand Down
8 changes: 4 additions & 4 deletions activerecord/lib/active_record/persistence.rb
Original file line number Diff line number Diff line change
Expand Up @@ -477,24 +477,24 @@ def relation_for_destroy

def create_or_update
raise ReadOnlyRecord if readonly?
result = new_record? ? create_record : update_record
result = new_record? ? _create_record : _update_record
result != false
end

# Updates the associated record with values matching those of the instance attributes.
# Returns the number of affected rows.
def update_record(attribute_names = @attributes.keys)
def _update_record(attribute_names = @attributes.keys)
attributes_values = arel_attributes_with_values_for_update(attribute_names)
if attributes_values.empty?
0
else
self.class.unscoped.update_record attributes_values, id, id_was
self.class.unscoped._update_record attributes_values, id, id_was
end
end

# Creates a record with values matching those of the instance attributes
# and returns its id.
def create_record(attribute_names = @attributes.keys)
def _create_record(attribute_names = @attributes.keys)
attributes_values = arel_attributes_with_values_for_create(attribute_names)

new_id = self.class.unscoped.insert attributes_values
Expand Down
2 changes: 1 addition & 1 deletion activerecord/lib/active_record/relation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def insert(values) # :nodoc:
binds)
end

def update_record(values, id, id_was) # :nodoc:
def _update_record(values, id, id_was) # :nodoc:
substitutes, binds = substitute_values values
um = @klass.unscoped.where(@klass.arel_table[@klass.primary_key].eq(id_was || id)).arel.compile_update(substitutes, @klass.primary_key)

Expand Down
4 changes: 2 additions & 2 deletions activerecord/lib/active_record/timestamp.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def initialize_dup(other) # :nodoc:

private

def create_record
def _create_record
if self.record_timestamps
current_time = current_time_from_proper_timezone

Expand All @@ -57,7 +57,7 @@ def create_record
super
end

def update_record(*args)
def _update_record(*args)
if should_record_timestamps?
current_time = current_time_from_proper_timezone

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -863,4 +863,22 @@ def test_reflect_the_most_recent_change
end
end
end

test 'belongs_to works with model name Record' do
Record = Class.new(ActiveRecord::Base) do
connection.create_table :records
end

Foo = Class.new(ActiveRecord::Base) do
connection.create_table :foos do |t|
t.belongs_to :record
end

belongs_to :record
end

record = Record.create!
Foo.create! record: record
assert_equal 1, Foo.count
end
end

0 comments on commit 9694f86

Please sign in to comment.