diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2017-12-29 22:10:24 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2017-12-29 22:12:06 +0900 |
commit | c10c21f2e1d0481db0eaa764c1605000b8a5c7bd (patch) | |
tree | 3d3ce16356b013cb11f1a6efed9c64ce6a36bdf2 | |
parent | dab7d401e8dd6192e36787f7b5b574d30b368388 (diff) | |
download | rails-c10c21f2e1d0481db0eaa764c1605000b8a5c7bd.tar.gz rails-c10c21f2e1d0481db0eaa764c1605000b8a5c7bd.tar.bz2 rails-c10c21f2e1d0481db0eaa764c1605000b8a5c7bd.zip |
Fix `cache_key` with a relation having custom select and order
We can't replace existing select list as long as referenced by ORDER BY.
-rw-r--r-- | activerecord/lib/active_record/collection_cache_key.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/collection_cache_key_test.rb | 6 |
2 files changed, 7 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/collection_cache_key.rb b/activerecord/lib/active_record/collection_cache_key.rb index 023d144693..12e4fae865 100644 --- a/activerecord/lib/active_record/collection_cache_key.rb +++ b/activerecord/lib/active_record/collection_cache_key.rb @@ -20,8 +20,7 @@ module ActiveRecord select_values = "COUNT(*) AS #{connection.quote_column_name("size")}, MAX(%s) AS timestamp" if collection.has_limit_or_offset? - query = collection.spawn - query.select_values = [column] + query = collection.select(column) subquery_alias = "subquery_for_cache_key" subquery_column = "#{subquery_alias}.#{timestamp_column}" subquery = query.arel.as(subquery_alias) diff --git a/activerecord/test/cases/collection_cache_key_test.rb b/activerecord/test/cases/collection_cache_key_test.rb index 479c9e03a5..c3af32394e 100644 --- a/activerecord/test/cases/collection_cache_key_test.rb +++ b/activerecord/test/cases/collection_cache_key_test.rb @@ -141,5 +141,11 @@ module ActiveRecord assert_match(/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\z/, developers.cache_key) end + + test "cache_key with a relation having custom select and order" do + developers = Developer.select("name AS dev_name").order("dev_name DESC").limit(5) + + assert_match(/\Adevelopers\/query-(\h+)-(\d+)-(\d+)\z/, developers.cache_key) + end end end |