From 87a84d3263c8712f85e70c45803203fa54658a9e Mon Sep 17 00:00:00 2001 From: Ryan Wallace Date: Fri, 6 Sep 2013 15:16:39 -0700 Subject: Allow Relation#from to accept other relations with bind values. --- activerecord/CHANGELOG.md | 4 ++++ activerecord/lib/active_record/relation/query_methods.rb | 1 + activerecord/test/cases/relations_test.rb | 7 +++++++ 3 files changed, 12 insertions(+) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index b79b9a87c6..b5265a02bd 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Allow Relation#from to accept other relations with bind values. + + *Ryan Wallace* + * Re-use `order` argument pre-processing for `reorder`. *Paul Nikitochkin* diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 1c6ea94c0b..9916c597ee 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -915,6 +915,7 @@ module ActiveRecord case opts when Relation name ||= 'subquery' + self.bind_values = opts.bind_values + self.bind_values opts.arel.as(name.to_s) else opts diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index b3ca45c4c8..88a12c61df 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -139,6 +139,13 @@ class RelationTest < ActiveRecord::TestCase assert_equal relation.to_a, Topic.select('a.*').from(relation, :a).to_a end + def test_finding_with_subquery_with_binds + relation = Post.first.comments + assert_equal relation.to_a, Comment.select('*').from(relation).to_a + assert_equal relation.to_a, Comment.select('subquery.*').from(relation).to_a + assert_equal relation.to_a, Comment.select('a.*').from(relation, :a).to_a + end + def test_finding_with_conditions assert_equal ["David"], Author.where(:name => 'David').map(&:name) assert_equal ['Mary'], Author.where(["name = ?", 'Mary']).map(&:name) -- cgit v1.2.3