Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #14562 from jefflai2/collection_proxy

CollectionProxy uses the arel of its association's scope.

Conflicts:
	activerecord/CHANGELOG.md
  • Loading branch information...
commit b097ebe6fae810161fa589f84bda291e6319ba0e 1 parent 2386d15
@rafaelfranca rafaelfranca authored
View
9 activerecord/CHANGELOG.md
@@ -1,3 +1,12 @@
+* `to_sql` on an association now matches the query that is actually executed, where it
+ could previously have incorrectly accrued additional conditions (e.g. as a result of
+ a previous query). CollectionProxy now always defers to the association scope's
+ `arel` method so the (incorrect) inherited one should be entirely concealed.
+
+ Fixes #14003.
+
+ *Jefferson Lai*
+
* Block a few default Class methods as scope name.
For instance, this will raise:
View
4 activerecord/lib/active_record/associations/collection_proxy.rb
@@ -860,6 +860,10 @@ def include?(record)
!!@association.include?(record)
end
+ def arel
+ scope.arel
+ end
+
def proxy_association
@association
end
View
6 activerecord/test/cases/relations_test.rb
@@ -549,6 +549,12 @@ def test_to_sql_on_eager_join
assert_equal expected, actual
end
+ def test_to_sql_on_scoped_proxy
+ auth = Author.first
+ Post.where("1=1").written_by(auth)
+ assert_not auth.posts.to_sql.include?("1=1")
+ end
+
def test_loading_with_one_association_with_non_preload
posts = Post.eager_load(:last_comment).order('comments.id DESC')
post = posts.find { |p| p.id == 1 }
View
4 activerecord/test/models/post.rb
@@ -149,6 +149,10 @@ def self.top(limit)
ranked_by_comments.limit_by(limit)
end
+ def self.written_by(author)
+ where(id: author.posts.pluck(:id))
+ end
+
def self.reset_log
@log = []
end
Please sign in to comment.
Something went wrong with that request. Please try again.