aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorErnie Miller <ernie@metautonomo.us>2011-08-20 13:00:26 -0400
committerErnie Miller <ernie@metautonomo.us>2011-08-20 13:00:26 -0400
commite2ae015952c5bdcca044504b5be1c13a518eeaac (patch)
treee6be33f99ba8e70c723187bc8c05e0490f00c417 /activerecord
parent8bd76aa50ec5dc5da3c398a0fd5dc971f64d8d68 (diff)
downloadrails-e2ae015952c5bdcca044504b5be1c13a518eeaac.tar.gz
rails-e2ae015952c5bdcca044504b5be1c13a518eeaac.tar.bz2
rails-e2ae015952c5bdcca044504b5be1c13a518eeaac.zip
Fix assumption of primary key name in PredicateBuilder subquery.
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/relation/predicate_builder.rb2
-rw-r--r--activerecord/test/cases/relations_test.rb10
2 files changed, 11 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb
index 2814771002..dc8667b5cd 100644
--- a/activerecord/lib/active_record/relation/predicate_builder.rb
+++ b/activerecord/lib/active_record/relation/predicate_builder.rb
@@ -19,7 +19,7 @@ module ActiveRecord
case value
when ActiveRecord::Relation
- value.select_values = [value.klass.arel_table['id']] if value.select_values.empty?
+ value.select_values = [value.klass.arel_table[value.klass.primary_key]] if value.select_values.empty?
attribute.in(value.arel.ast)
when Array, ActiveRecord::Associations::CollectionProxy
values = value.to_a.map { |x|
diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb
index 97abd67385..711b07b113 100644
--- a/activerecord/test/cases/relations_test.rb
+++ b/activerecord/test/cases/relations_test.rb
@@ -540,6 +540,16 @@ class RelationTest < ActiveRecord::TestCase
}
end
+ def test_find_all_using_where_with_relation_and_alternate_primary_key
+ cool_first = minivans(:cool_first)
+ # switching the lines below would succeed in current rails
+ # assert_queries(2) {
+ assert_queries(1) {
+ relation = Minivan.where(:minivan_id => Minivan.where(:name => cool_first.name))
+ assert_equal [cool_first], relation.all
+ }
+ end
+
def test_find_all_using_where_with_relation_with_joins
david = authors(:david)
assert_queries(1) {