diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-02-14 11:51:56 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-02-14 11:51:56 -0800 |
commit | 0123ceb9cd1ae352308184852cae1edbd62155e1 (patch) | |
tree | e52d0c9c4fdca1f5e263e38faa10877eaa3190ec /activerecord/lib/active_record/associations/has_many_through_association.rb | |
parent | 6f4e3ffd0f42c92a00536e7e1356be3e8cf37639 (diff) | |
parent | b9ea751d0e56bd00d341766977a607ed3f7ddd0f (diff) | |
download | rails-0123ceb9cd1ae352308184852cae1edbd62155e1.tar.gz rails-0123ceb9cd1ae352308184852cae1edbd62155e1.tar.bz2 rails-0123ceb9cd1ae352308184852cae1edbd62155e1.zip |
Merge remote branch 'jonleighton/association_fixes'
* jonleighton/association_fixes:
Add a transaction wrapper in add_to_target. This means that #build will now also use a transaction. IMO this is reasonable given that the before_add and after_add callbacks might do anything, and this great consistency allows us to abstract out the duplicate code from #build and #create.
Inline ensure_owner_is_persisted! as it is only called from one place
@target should always be an array
Rename add_record_to_target_with_callbacks to add_to_target
Don't pass the block through build_record
Move create and create! next to build
Get rid of create_record as it is not only used in one place
Get rid of AssociationCollection#save_record
Fix test/cases/connection_pool_test.rb for sqlite3 in-memory db
Add interpolation of association conditions back in, in the form of proc { ... } rather than instance_eval-ing strings
Diffstat (limited to 'activerecord/lib/active_record/associations/has_many_through_association.rb')
-rw-r--r-- | activerecord/lib/active_record/associations/has_many_through_association.rb | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/associations/has_many_through_association.rb b/activerecord/lib/active_record/associations/has_many_through_association.rb index f299f51466..9f74d57c4d 100644 --- a/activerecord/lib/active_record/associations/has_many_through_association.rb +++ b/activerecord/lib/active_record/associations/has_many_through_association.rb @@ -22,12 +22,21 @@ module ActiveRecord 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)) |