mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
AssociationCollection#include? working properly for objects added with build method [#3472 state:resolved]
This commit is contained in:
parent
505b532605
commit
ef6df93a8d
4 changed files with 39 additions and 0 deletions
|
@ -363,6 +363,7 @@ module ActiveRecord
|
||||||
|
|
||||||
def include?(record)
|
def include?(record)
|
||||||
return false unless record.is_a?(@reflection.klass)
|
return false unless record.is_a?(@reflection.klass)
|
||||||
|
return include_in_memory?(record) if record.new_record?
|
||||||
load_target if @reflection.options[:finder_sql] && !loaded?
|
load_target if @reflection.options[:finder_sql] && !loaded?
|
||||||
return @target.include?(record) if loaded?
|
return @target.include?(record) if loaded?
|
||||||
exists?(record)
|
exists?(record)
|
||||||
|
@ -554,6 +555,18 @@ module ActiveRecord
|
||||||
args.first.kind_of?(Hash) || !(loaded? || @owner.new_record? || @reflection.options[:finder_sql] ||
|
args.first.kind_of?(Hash) || !(loaded? || @owner.new_record? || @reflection.options[:finder_sql] ||
|
||||||
@target.any? { |record| record.new_record? } || args.first.kind_of?(Integer))
|
@target.any? { |record| record.new_record? } || args.first.kind_of?(Integer))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def include_in_memory?(record)
|
||||||
|
if @reflection.is_a?(ActiveRecord::Reflection::ThroughReflection)
|
||||||
|
@owner.send(proxy_reflection.through_reflection.name.to_sym).map do |source|
|
||||||
|
source_reflection_target = source.send(proxy_reflection.source_reflection.name)
|
||||||
|
return true if source_reflection_target.respond_to?(:include?) ? source_reflection_target.include?(record) : source_reflection_target == record
|
||||||
|
end
|
||||||
|
false
|
||||||
|
else
|
||||||
|
@target.include?(record)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -858,4 +858,10 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
||||||
assert_equal new_developer.name, "Marcelo"
|
assert_equal new_developer.name, "Marcelo"
|
||||||
assert_equal new_developer.salary, 90_000
|
assert_equal new_developer.salary, 90_000
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_include_method_in_has_and_belongs_to_many_association_should_return_true_for_instance_added_with_build
|
||||||
|
project = Project.new
|
||||||
|
developer = project.developers.build
|
||||||
|
assert project.developers.include?(developer)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1267,4 +1267,10 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
|
||||||
assert_equal new_comment.type, "SpecialComment"
|
assert_equal new_comment.type, "SpecialComment"
|
||||||
assert_equal new_comment.post_id, posts(:welcome).id
|
assert_equal new_comment.post_id, posts(:welcome).id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_include_method_in_has_many_association_should_return_true_for_instance_added_with_build
|
||||||
|
post = Post.new
|
||||||
|
comment = post.comments.build
|
||||||
|
assert post.comments.include?(comment)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -435,4 +435,18 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase
|
||||||
assert_equal new_subscriber.nick, "marklazz"
|
assert_equal new_subscriber.nick, "marklazz"
|
||||||
assert_equal new_subscriber.name, "Marcelo Giorgi"
|
assert_equal new_subscriber.name, "Marcelo Giorgi"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_include_method_in_association_through_should_return_true_for_instance_added_with_build
|
||||||
|
person = Person.new
|
||||||
|
reference = person.references.build
|
||||||
|
job = reference.build_job
|
||||||
|
assert person.jobs.include?(job)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_include_method_in_association_through_should_return_true_for_instance_added_with_nested_builds
|
||||||
|
author = Author.new
|
||||||
|
post = author.posts.build
|
||||||
|
comment = post.comments.build
|
||||||
|
assert author.comments.include?(comment)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue