diff options
author | Arthur Neves <arthurnn@gmail.com> | 2016-02-02 23:37:31 -0500 |
---|---|---|
committer | Arthur Neves <arthurnn@gmail.com> | 2016-02-02 23:37:31 -0500 |
commit | bcd0c8cfc250039ddc145c3302633c4890880930 (patch) | |
tree | f1c0fa68437c66fcdec6d9aa477e7e5eb5da76a6 | |
parent | 522099a13ffea611dfb37d4d22da62eb8cb81c12 (diff) | |
parent | 9c9fb19b9eda46a76d7ce4fd6cb9cc94bd965e62 (diff) | |
download | rails-bcd0c8cfc250039ddc145c3302633c4890880930.tar.gz rails-bcd0c8cfc250039ddc145c3302633c4890880930.tar.bz2 rails-bcd0c8cfc250039ddc145c3302633c4890880930.zip |
Merge pull request #20997 from himesh-r/issue-20995
Changed id-writer to save join table records based on association
primary key #20995.
-rw-r--r-- | activerecord/lib/active_record/associations/collection_association.rb | 5 | ||||
-rw-r--r-- | activerecord/test/cases/associations/has_many_through_associations_test.rb | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index 473b80a658..9f2c7292ea 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -72,7 +72,10 @@ module ActiveRecord pk_type = reflection.primary_key_type ids = Array(ids).reject(&:blank?) ids.map! { |i| pk_type.cast(i) } - replace(klass.find(ids).index_by(&:id).values_at(*ids)) + records = klass.where(reflection.association_primary_key => ids).index_by do |r| + r.send(reflection.association_primary_key) + end.values_at(*ids) + replace(records) end def reset diff --git a/activerecord/test/cases/associations/has_many_through_associations_test.rb b/activerecord/test/cases/associations/has_many_through_associations_test.rb index 226ecf5447..bb8c9fa19c 100644 --- a/activerecord/test/cases/associations/has_many_through_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_through_associations_test.rb @@ -884,7 +884,7 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase def test_collection_singular_ids_setter_raises_exception_when_invalid_ids_set company = companies(:rails_core) ids = [Developer.first.id, -9999] - assert_raises(ActiveRecord::RecordNotFound) {company.developer_ids= ids} + assert_raises(ActiveRecord::AssociationTypeMismatch) {company.developer_ids= ids} end def test_build_a_model_from_hm_through_association_with_where_clause |