1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Make outer joins on proper parent

Outer joins were being built on the root relation klass rather than the
one specified in the join dependency root
This commit is contained in:
Washington Luiz 2013-12-28 23:46:21 -03:00
parent 969a0778cd
commit 8e1f26c66c
2 changed files with 12 additions and 2 deletions

View file

@ -114,7 +114,7 @@ module ActiveRecord
walk join_root, oj.join_root
else
oj.join_root.children.flat_map { |child|
make_outer_joins join_root, child
make_outer_joins oj.join_root, child
}
end
}

View file

@ -207,6 +207,17 @@ module ActiveRecord
assert_equal 3, authors(:david).posts.merge(posts_with_special_comments_with_ratings).count.length
end
def test_relation_merging_with_joins_as_join_dependency_pick_proper_parent
post = Post.create!(title: "haha", body: "huhu")
comment = post.comments.create!(body: "hu")
3.times { comment.ratings.create! }
relation = Post.joins Associations::JoinDependency.new(Post, :comments, [])
relation = relation.joins Associations::JoinDependency.new(Comment, :ratings, [])
assert_equal 3, relation.pluck(:id).select { |id| id == post.id }.count
end
def test_respond_to_for_non_selected_element
post = Post.select(:title).first
assert_equal false, post.respond_to?(:body), "post should not respond_to?(:body) since invoking it raises exception"
@ -221,6 +232,5 @@ module ActiveRecord
posts_with_special_comments_with_ratings = Post.group("posts.id").joins(:special_comments).merge(special_comments_with_ratings)
assert_equal 3, authors(:david).posts.merge(posts_with_special_comments_with_ratings).count.length
end
end
end