提交 9694f86d 编写于 作者: P Prathamesh Sonpatki

[Active Record] Renamed private methods create_record and update_record

 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 #11645
上级 25ce856c
......@@ -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
......@@ -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|
......
......@@ -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 = {})
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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?
......
......@@ -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
......
......@@ -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)
......
......@@ -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
......@@ -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
......
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册