Navigation Menu

Skip to content

Commit

Permalink
Fixed that scoped joins would not always be respected (closes #6821) …
Browse files Browse the repository at this point in the history
…[Theory/Danger]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9022 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information
dhh committed Mar 13, 2008
1 parent 58c30f6 commit 2c6e616
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
2 changes: 2 additions & 0 deletions activerecord/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*

* Fixed that scoped joins would not always be respected #6821 [Theory/Danger]

* Ensure that ActiveRecord::Calculations disambiguates field names with the table name. #11027 [cavalle]

* Added add/remove_timestamps to the schema statements for adding the created_at/updated_at columns on existing tables #11129 [jramirez]
Expand Down
15 changes: 8 additions & 7 deletions activerecord/lib/active_record/base.rb
Expand Up @@ -1478,13 +1478,14 @@ def add_lock!(sql, options, scope = :auto)
# The optional scope argument is for the current :find scope.
def add_joins!(sql, options, scope = :auto)
scope = scope(:find) if :auto == scope
join = (scope && scope[:joins]) || options[:joins]
case join
when Symbol, Hash, Array
join_dependency = ActiveRecord::Associations::ClassMethods::InnerJoinDependency.new(self, join, nil)
sql << " #{join_dependency.join_associations.collect { |assoc| assoc.association_join }.join} "
else
sql << " #{join} "
[(scope && scope[:joins]), options[:joins]].each do |join|
case join
when Symbol, Hash, Array
join_dependency = ActiveRecord::Associations::ClassMethods::InnerJoinDependency.new(self, join, nil)
sql << " #{join_dependency.join_associations.collect { |assoc| assoc.association_join }.join} "
else
sql << " #{join} "
end
end
end

Expand Down
8 changes: 8 additions & 0 deletions activerecord/test/cases/associations/join_model_test.rb
Expand Up @@ -299,6 +299,14 @@ def test_has_many_going_through_join_model_with_custom_foreign_key
assert_equal [], posts(:thinking).authors
assert_equal [authors(:mary)], posts(:authorless).authors
end

def test_both_scoped_and_explicit_joins_should_be_respected
assert_nothing_raised do
Post.send(:with_scope, :find => {:joins => "left outer join comments on comments.id = posts.id"}) do
Post.find :all, :select => "comments.id, authors.id", :joins => "left outer join authors on authors.id = posts.author_id"
end
end
end

def test_belongs_to_polymorphic_with_counter_cache
assert_equal 0, posts(:welcome)[:taggings_count]
Expand Down

0 comments on commit 2c6e616

Please sign in to comment.