Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added test_has_many_through_has_many_with_has_many_through_habtm_sour…

…ce_reflection and make it pass
  • Loading branch information...
commit bc821a56114ae6f6d0b595475ad9e71f01f46f35 1 parent 22782e2
@jonleighton jonleighton authored
View
8 activerecord/lib/active_record/associations/through_association_scope.rb
@@ -92,7 +92,11 @@ def construct_through_joins
polymorphic_conditions(left, left)
)
when :has_and_belongs_to_many
- raise NotImplementedError
+ joins << inner_join_sql(
+ right_table_and_alias,
+ table_aliases[left].first, left.primary_key_name,
+ table_aliases[right], right.klass.primary_key
+ )
end
else
case left.source_reflection.macro
@@ -106,7 +110,7 @@ def construct_through_joins
when :has_many, :has_one
if right.macro == :has_and_belongs_to_many
join_table, right_table = table_aliases[right]
- right_table_and_alias = table_name_and_alias(right.quoted_table_name, right_table)
+ right_table_and_alias = table_name_and_alias(right.quoted_table_name, right_table)
else
right_table = table_aliases[right]
end
View
2  activerecord/test/cases/associations/join_model_test.rb
@@ -304,7 +304,7 @@ def test_has_many_array_methods_called_by_method_missing
end
def test_has_many_going_through_join_model_with_custom_foreign_key
- assert_equal [], posts(:thinking).authors
+ assert_equal [authors(:bob)], posts(:thinking).authors
assert_equal [authors(:mary)], posts(:authorless).authors
end
View
17 activerecord/test/cases/associations/nested_has_many_through_associations_test.rb
@@ -25,6 +25,7 @@
require 'models/club'
require 'models/organization'
require 'models/category'
+require 'models/categorization'
# NOTE: Some of these tests might not really test "nested" HMT associations, as opposed to ones which
# are just one level deep. But it's all the same thing really, as the "nested" code is being
@@ -34,7 +35,8 @@
class NestedHasManyThroughAssociationsTest < ActiveRecord::TestCase
fixtures :authors, :books, :posts, :subscriptions, :subscribers, :tags, :taggings,
:people, :readers, :references, :jobs, :ratings, :comments, :members, :member_details,
- :member_types, :sponsors, :clubs, :organizations, :categories, :categories_posts
+ :member_types, :sponsors, :clubs, :organizations, :categories, :categories_posts,
+ :categorizations
# Through associations can either use the has_many or has_one macros.
#
@@ -183,6 +185,19 @@ def test_has_many_through_has_and_belongs_to_many_with_has_many_source_reflectio
# assert_equal [comments(:greetings), comments(:more_greetings)], categories[1].post_comments
end
+ # has_many through
+ # Source: has_many through a habtm
+ # Through: has_many through
+ def test_has_many_through_has_many_with_has_many_through_habtm_source_reflection
+ assert_equal [comments(:greetings), comments(:more_greetings)], authors(:bob).category_post_comments
+
+ authors = Author.joins(:category_post_comments).where('comments.id' => comments(:does_it_hurt).id)
+ assert_equal [authors(:david), authors(:mary)], authors
+
+ comments = Author.joins(:category_post_comments)
+ assert_equal [comments(:greetings), comments(:more_greetings)], comments[2].category_post_comments
+ end
+
# TODO: has_many through
# Source: belongs_to
# Through: has_many through
View
6 activerecord/test/fixtures/categorizations.yml
@@ -15,3 +15,9 @@ mary_thinking_general:
author_id: 2
post_id: 2
category_id: 1
+
+bob_misc_by_bob_technology:
+ id: 4
+ author_id: 3
+ post_id: 8
+ category_id: 2
View
1  activerecord/test/models/author.rb
@@ -101,6 +101,7 @@ def testing_proxy_target
belongs_to :author_address_extra, :dependent => :delete, :class_name => "AuthorAddress"
has_many :post_categories, :through => :posts, :source => :categories
+ has_many :category_post_comments, :through => :categories, :source => :post_comments
scope :relation_include_posts, includes(:posts)
scope :relation_include_tags, includes(:tags)

0 comments on commit bc821a5

Please sign in to comment.
Something went wrong with that request. Please try again.