Skip to content

Commit

Permalink
Merge pull request #14154 from al2o3cr/issue12770
Browse files Browse the repository at this point in the history
Pass a base relation to build_default_scope when joining
  • Loading branch information
tenderlove committed Mar 28, 2014
2 parents dd3ea17 + 70a5e56 commit c81e4e6
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def join_constraints(foreign_table, foreign_klass, node, join_type, tables, scop
end
scope_chain_index += 1

scope_chain_items.concat [klass.send(:build_default_scope)].compact
scope_chain_items.concat [klass.send(:build_default_scope, ActiveRecord::Relation.create(klass, table))].compact

rel = scope_chain_items.inject(scope_chain_items.shift) do |left, right|
left.merge right
Expand Down
6 changes: 3 additions & 3 deletions activerecord/lib/active_record/scoping/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,14 @@ def default_scope(scope = nil)
self.default_scopes += [scope]
end

def build_default_scope # :nodoc:
def build_default_scope(base_rel = relation) # :nodoc:
if !Base.is_a?(method(:default_scope).owner)
# The user has defined their own default scope method, so call that
evaluate_default_scope { default_scope }
elsif default_scopes.any?
evaluate_default_scope do
default_scopes.inject(relation) do |default_scope, scope|
default_scope.merge(unscoped { scope.call })
default_scopes.inject(base_rel) do |default_scope, scope|
default_scope.merge(base_rel.scoping { scope.call })
end
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,13 @@ def test_find_with_conditions_on_through_reflection

assert_equal [author], Author.where(id: author).joins(:special_categorizations)
end

test "the default scope of the target is correctly aliased when joining associations" do
author = Author.create! name: "Jon"
author.categories.create! name: 'Not Special'
author.special_categories.create! name: 'Special'

categories = author.categories.includes(:special_categorizations).references(:special_categorizations).to_a
assert_equal 2, categories.size
end
end
1 change: 1 addition & 0 deletions activerecord/test/models/category.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ def self.what_are_you
end

has_many :categorizations
has_many :special_categorizations
has_many :post_comments, :through => :posts, :source => :comments

has_many :authors, :through => :categorizations
Expand Down

0 comments on commit c81e4e6

Please sign in to comment.