diff options
author | Ernie Miller <ernie@erniemiller.org> | 2012-10-05 18:36:44 -0400 |
---|---|---|
committer | Ernie Miller <ernie@erniemiller.org> | 2012-10-05 18:36:44 -0400 |
commit | 9f3b8cd5a5e37583bf9356456a3fc1b3484f4294 (patch) | |
tree | 3e80041a01cc4f228127895aae007d85f8b77023 /activerecord/test/cases | |
parent | 2b83b07307c3e5552205f33e956d3785ed3e538b (diff) | |
download | rails-9f3b8cd5a5e37583bf9356456a3fc1b3484f4294.tar.gz rails-9f3b8cd5a5e37583bf9356456a3fc1b3484f4294.tar.bz2 rails-9f3b8cd5a5e37583bf9356456a3fc1b3484f4294.zip |
Fix has_many assocation w/select load after create
If you create a new record via a collection association proxy that has
not loaded its target, and which selects additional attributes through
the association, then when the proxy loads its target, it will
inadvertently trigger an ActiveModel::MissingAttributeError during
attribute writing when CollectionAssociation#merge_target_lists attempts
to do its thing, since the newly loaded records will possess attributes
the created record does not.
This error also raises a bogus/confusing deprecation warning when
accessing the association in Rails 3.2.x, so cherry-pick would be
appreciated!
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r-- | activerecord/test/cases/associations/join_model_test.rb | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/activerecord/test/cases/associations/join_model_test.rb b/activerecord/test/cases/associations/join_model_test.rb index 86893ec4b3..9b00c21b52 100644 --- a/activerecord/test/cases/associations/join_model_test.rb +++ b/activerecord/test/cases/associations/join_model_test.rb @@ -231,6 +231,14 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase assert_equal "2", categories(:sti_test).authors_with_select.first.post_id.to_s end + def test_create_through_has_many_with_piggyback + category = categories(:sti_test) + ernie = category.authors_with_select.create(:name => 'Ernie') + assert_nothing_raised do + assert_equal ernie, category.authors_with_select.detect {|a| a.name == 'Ernie'} + end + end + def test_include_has_many_through posts = Post.all.merge!(:order => 'posts.id').to_a posts_with_authors = Post.all.merge!(:includes => :authors, :order => 'posts.id').to_a |