diff options
author | Tekin Suleyman <tekin@tekin.co.uk> | 2018-11-17 13:50:01 -0800 |
---|---|---|
committer | Tekin Suleyman <tekin@tekin.co.uk> | 2018-11-26 16:19:52 -0800 |
commit | 3b9982a3b778b63488975eb03592d33aa9fb04dd (patch) | |
tree | 1c738d8c2e7b47ed20fe0937b8a723b6eb1ae310 /activerecord/test | |
parent | 85b080365313437f646070ca214fef433c06db6a (diff) | |
download | rails-3b9982a3b778b63488975eb03592d33aa9fb04dd.tar.gz rails-3b9982a3b778b63488975eb03592d33aa9fb04dd.tar.bz2 rails-3b9982a3b778b63488975eb03592d33aa9fb04dd.zip |
Make implicit order column configurable
When calling ordered finder methods such as +first+ or +last+ without an
explicit order clause, ActiveRecord sorts records by primary key. This
can result in unpredictable and surprising behaviour when the primary
key is not an auto-incrementing integer, for example when it's a UUID.
This change makes it possible to override the column used for implicit
ordering such that +first+ and +last+ will return more predictable
results. For Example:
class Project < ActiveRecord::Base
self.implicit_order_column = "created_at"
end
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/finder_test.rb | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index 52fd9291b2..21e84d850b 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -741,6 +741,16 @@ class FinderTest < ActiveRecord::TestCase assert_equal expected, clients.limit(5).first(2) end + def test_implicit_order_column_is_configurable + old_implicit_order_column = Topic.implicit_order_column + Topic.implicit_order_column = "title" + + assert_equal topics(:fifth), Topic.first + assert_equal topics(:third), Topic.last + ensure + Topic.implicit_order_column = old_implicit_order_column + end + def test_take_and_first_and_last_with_integer_should_return_an_array assert_kind_of Array, Topic.take(5) assert_kind_of Array, Topic.first(5) |