aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-07-02 16:11:29 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-07-02 16:11:29 -0700
commit79b88e875b407f8418932fb757999909c2083b89 (patch)
treedb0195ee27c7abfdce70b027d69e5aa875b19e97 /activerecord
parent1a5394f4afdf2eeadd91b5b0ff5ad199c9dc93b0 (diff)
downloadrails-79b88e875b407f8418932fb757999909c2083b89.tar.gz
rails-79b88e875b407f8418932fb757999909c2083b89.tar.bz2
rails-79b88e875b407f8418932fb757999909c2083b89.zip
fix to_sql output on eager loaded relations
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/relation.rb10
-rw-r--r--activerecord/test/cases/relations_test.rb8
2 files changed, 17 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 18fdac2600..612f376c55 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -501,7 +501,15 @@ module ActiveRecord
# User.where(name: 'Oscar').to_sql
# # => SELECT "users".* FROM "users" WHERE "users"."name" = 'Oscar'
def to_sql
- @to_sql ||= klass.connection.to_sql(arel, bind_values.dup)
+ @to_sql ||= begin
+ if eager_loading?
+ join_dependency = construct_join_dependency
+ relation = construct_relation_for_association_find(join_dependency)
+ klass.connection.to_sql(relation.arel, relation.bind_values)
+ else
+ klass.connection.to_sql(arel, bind_values.dup)
+ end
+ end
end
# Returns a hash of where conditions.
diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb
index 7a6d9be515..b205472cf5 100644
--- a/activerecord/test/cases/relations_test.rb
+++ b/activerecord/test/cases/relations_test.rb
@@ -481,6 +481,14 @@ class RelationTest < ActiveRecord::TestCase
assert_equal Post.find(1).last_comment, post.last_comment
end
+ def test_to_sql_on_eager_join
+ expected = assert_sql {
+ Post.eager_load(:last_comment).order('comments.id DESC').to_a
+ }.first
+ actual = Post.eager_load(:last_comment).order('comments.id DESC').to_sql
+ assert_equal expected, actual
+ 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 }