diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-12 18:01:02 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-12 18:07:53 -0800 |
commit | 3165dca28c1db741994c3176e7b158a9f684e816 (patch) | |
tree | 6456a3c446fe42bdb834fd222c59c9d8e7459c5e | |
parent | f2beb56c8b14326f35af887ef0d2ee6356946065 (diff) | |
download | rails-3165dca28c1db741994c3176e7b158a9f684e816.tar.gz rails-3165dca28c1db741994c3176e7b158a9f684e816.tar.bz2 rails-3165dca28c1db741994c3176e7b158a9f684e816.zip |
include_in_memory? should check against @target list in case of new records. [#6257 state:resolved]
-rw-r--r-- | activerecord/lib/active_record/associations/association_collection.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/associations/has_many_through_associations_test.rb | 7 |
2 files changed, 9 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb index da3800bf4a..e65ef2b768 100644 --- a/activerecord/lib/active_record/associations/association_collection.rb +++ b/activerecord/lib/active_record/associations/association_collection.rb @@ -518,10 +518,10 @@ module ActiveRecord def include_in_memory?(record) if @reflection.is_a?(ActiveRecord::Reflection::ThroughReflection) - @owner.send(proxy_reflection.through_reflection.name).any? do |source| + @owner.send(proxy_reflection.through_reflection.name).any? { |source| target = source.send(proxy_reflection.source_reflection.name) target.respond_to?(:include?) ? target.include?(record) : target == record - end + } || @target.include?(record) else @target.include?(record) end 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 e98d178ff5..7235631b5a 100644 --- a/activerecord/test/cases/associations/has_many_through_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_through_associations_test.rb @@ -32,6 +32,13 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase Reader.create :person_id => 0, :post_id => 0 end + def test_include? + person = Person.new + post = Post.new + person.posts << post + assert person.posts.include?(post) + end + def test_associate_existing assert_queries(2) { posts(:thinking); people(:david) } |