diff options
author | José Valim <jose.valim@gmail.com> | 2010-01-09 00:23:29 +0100 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-01-09 00:23:29 +0100 |
commit | 7e6530b17003b3c42ebbfa8119c3fb7f3aea64b2 (patch) | |
tree | 22b458af62c1e159854cb9fd4d207b6b2286c7bb /activerecord/lib | |
parent | 017f5d5308098438da0b8c44163af4ecb422f1e7 (diff) | |
parent | 7f775ef1a92129fcc77079bc8e00c99a75b38a38 (diff) | |
download | rails-7e6530b17003b3c42ebbfa8119c3fb7f3aea64b2.tar.gz rails-7e6530b17003b3c42ebbfa8119c3fb7f3aea64b2.tar.bz2 rails-7e6530b17003b3c42ebbfa8119c3fb7f3aea64b2.zip |
Merge remote branch 'eloy/master'
Diffstat (limited to 'activerecord/lib')
-rwxr-xr-x | activerecord/lib/active_record/associations.rb | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/autosave_association.rb | 22 | ||||
-rw-r--r-- | activerecord/lib/active_record/nested_attributes.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/reflection.rb | 10 |
4 files changed, 23 insertions, 17 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index 1320f5b624..aceb83044b 100755 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -1770,7 +1770,7 @@ module ActiveRecord end def using_limitable_reflections?(reflections) - reflections.collect(&:collection_association?).length.zero? + reflections.collect(&:collection?).length.zero? end def column_aliases(join_dependency) @@ -1843,7 +1843,7 @@ module ActiveRecord case associations when Symbol, String reflection = base.reflections[associations] - if reflection && reflection.collection_association? + if reflection && reflection.collection? records.each { |record| record.send(reflection.name).target.uniq! } end when Array @@ -1857,7 +1857,7 @@ module ActiveRecord parent_records = [] records.each do |record| if descendant = record.send(reflection.name) - if reflection.collection_association? + if reflection.collection? parent_records.concat descendant.target.uniq else parent_records << descendant diff --git a/activerecord/lib/active_record/autosave_association.rb b/activerecord/lib/active_record/autosave_association.rb index f01d0903cd..7c4e81a617 100644 --- a/activerecord/lib/active_record/autosave_association.rb +++ b/activerecord/lib/active_record/autosave_association.rb @@ -166,7 +166,7 @@ module ActiveRecord def add_autosave_association_callbacks(reflection) save_method = :"autosave_associated_records_for_#{reflection.name}" validation_method = :"validate_associated_records_for_#{reflection.name}" - collection = reflection.collection_association? + collection = reflection.collection? unless method_defined?(save_method) if collection @@ -224,10 +224,10 @@ module ActiveRecord def associated_records_to_validate_or_save(association, new_record, autosave) if new_record association - elsif association.loaded? - autosave ? association : association.find_all { |record| record.new_record? } + elsif autosave + association.target.find_all { |record| record.new_record? || record.changed? || record.marked_for_destruction? } else - autosave ? association.target : association.target.find_all { |record| record.new_record? } + association.target.find_all { |record| record.new_record? } end end @@ -296,13 +296,15 @@ module ActiveRecord association.destroy(record) elsif autosave != false && (@new_record_before_save || record.new_record?) if autosave - association.send(:insert_record, record, false, false) + saved = association.send(:insert_record, record, false, false) else association.send(:insert_record, record) end elsif autosave - record.save(false) + saved = record.save(false) end + + raise ActiveRecord::Rollback if saved == false end end @@ -329,7 +331,9 @@ module ActiveRecord key = reflection.options[:primary_key] ? send(reflection.options[:primary_key]) : id if autosave != false && (new_record? || association.new_record? || association[reflection.primary_key_name] != key || autosave) association[reflection.primary_key_name] = key - association.save(!autosave) + saved = association.save(!autosave) + raise ActiveRecord::Rollback if !saved && autosave + saved end end end @@ -350,7 +354,7 @@ module ActiveRecord if autosave && association.marked_for_destruction? association.destroy elsif autosave != false - association.save(!autosave) if association.new_record? || autosave + saved = association.save(!autosave) if association.new_record? || autosave if association.updated? association_id = association.send(reflection.options[:primary_key] || :id) @@ -360,6 +364,8 @@ module ActiveRecord self[reflection.options[:foreign_type]] = association.class.base_class.name.to_s end end + + saved if autosave end end end diff --git a/activerecord/lib/active_record/nested_attributes.rb b/activerecord/lib/active_record/nested_attributes.rb index 9038888d22..f79a12a95c 100644 --- a/activerecord/lib/active_record/nested_attributes.rb +++ b/activerecord/lib/active_record/nested_attributes.rb @@ -238,7 +238,7 @@ module ActiveRecord reflection.options[:autosave] = true add_autosave_association_callbacks(reflection) nested_attributes_options[association_name.to_sym] = options - type = (reflection.collection_association? ? :collection : :one_to_one) + type = (reflection.collection? ? :collection : :one_to_one) # def pirate_attributes=(attributes) # assign_nested_attributes_for_one_to_one_association(:pirate, attributes) diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb index d6fad5cf29..32b9a2aa87 100644 --- a/activerecord/lib/active_record/reflection.rb +++ b/activerecord/lib/active_record/reflection.rb @@ -255,11 +255,11 @@ module ActiveRecord # Returns whether or not this association reflection is for a collection # association. Returns +true+ if the +macro+ is one of +has_many+ or # +has_and_belongs_to_many+, +false+ otherwise. - def collection_association? - if @collection_association.nil? - @collection_association = [:has_many, :has_and_belongs_to_many].include?(macro) + def collection? + if @collection.nil? + @collection = [:has_many, :has_and_belongs_to_many].include?(macro) end - @collection_association + @collection end # Returns whether or not the association should be validated as part of @@ -278,7 +278,7 @@ module ActiveRecord private def derive_class_name class_name = name.to_s.camelize - class_name = class_name.singularize if collection_association? + class_name = class_name.singularize if collection? class_name end |