Skip to content

Commit

Permalink
Get rid of AssociationCollection#save_record
Browse files Browse the repository at this point in the history
  • Loading branch information
jonleighton committed Feb 14, 2011
1 parent eab5fb4 commit 7ce7ae0
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 26 deletions.
Expand Up @@ -197,16 +197,15 @@ def create(attrs = {})
else
create_record(attrs) do |record|
yield(record) if block_given?
insert_record(record, false)
insert_record(record)
end
end
end

def create!(attrs = {})
create_record(attrs) do |record|
yield(record) if block_given?
insert_record(record, true)
end
def create!(attrs = {}, &block)
record = create(attrs, &block)
Array.wrap(record).each(&:save!)
record
end

# Returns the size of the collection by executing a SELECT COUNT(*)
Expand Down Expand Up @@ -419,17 +418,11 @@ def merge_target_lists(loaded, existing)
end + existing
end

# Do the relevant stuff to insert the given record into the association collection. The
# force param specifies whether or not an exception should be raised on failure. The
# validate param specifies whether validation should be performed (if force is false).
def insert_record(record, force = true, validate = true)
# Do the relevant stuff to insert the given record into the association collection.
def insert_record(record, validate = true)
raise NotImplementedError
end

def save_record(record, force, validate)
force ? record.save! : record.save(:validate => validate)
end

def create_record(attributes, &block)
ensure_owner_is_persisted!
transaction { build_record(attributes, &block) }
Expand Down
Expand Up @@ -11,10 +11,8 @@ def initialize(owner, reflection)

protected

def insert_record(record, force = true, validate = true)
if record.new_record?
return false unless save_record(record, force, validate)
end
def insert_record(record, validate = true)
return if record.new_record? && !record.save(:validate => validate)

if @reflection.options[:insert_sql]
@owner.connection.insert(interpolate(@reflection.options[:insert_sql], record))
Expand All @@ -27,7 +25,7 @@ def insert_record(record, force = true, validate = true)
@owner.connection.insert stmt.to_sql
end

true
record
end

def association_scope
Expand Down
Expand Up @@ -8,9 +8,9 @@ module Associations
class HasManyAssociation < AssociationCollection #:nodoc:
protected

def insert_record(record, force = false, validate = true)
def insert_record(record, validate = true)
set_owner_attributes(record)
save_record(record, force, validate)
record.save(:validate => validate)
end

private
Expand Down
Expand Up @@ -22,12 +22,21 @@ def size
end
end

def <<(*records)
unless @owner.new_record?
records.flatten.each do |record|
raise_on_type_mismatch(record)
record.save! if record.new_record?
end
end

super
end

protected

def insert_record(record, force = true, validate = true)
if record.new_record?
return unless save_record(record, force, validate)
end
def insert_record(record, validate = true)
return if record.new_record? && !record.save(:validate => validate)

through_association = @owner.send(@reflection.through_reflection.name)
through_association.create!(construct_join_attributes(record))
Expand Down
2 changes: 1 addition & 1 deletion activerecord/lib/active_record/autosave_association.rb
Expand Up @@ -312,7 +312,7 @@ def save_collection_association(reflection)
association.destroy(record)
elsif autosave != false && (@new_record_before_save || record.new_record?)
if autosave
saved = association.send(:insert_record, record, false, false)
saved = association.send(:insert_record, record, false)
else
association.send(:insert_record, record)
end
Expand Down

0 comments on commit 7ce7ae0

Please sign in to comment.