mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added test_has_many_through_has_many_with_has_many_through_habtm_source_reflection and make it pass
This commit is contained in:
parent
22782e2cc1
commit
bc821a5611
5 changed files with 30 additions and 4 deletions
|
@ -92,7 +92,11 @@ module ActiveRecord
|
|||
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 @@ module ActiveRecord
|
|||
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
|
||||
|
|
|
@ -304,7 +304,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|||
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
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ require 'models/sponsor'
|
|||
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 @@ require 'models/category'
|
|||
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 @@ class NestedHasManyThroughAssociationsTest < ActiveRecord::TestCase
|
|||
# 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -101,6 +101,7 @@ class Author < ActiveRecord::Base
|
|||
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)
|
||||
|
|
Loading…
Reference in a new issue