aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2013-11-02 19:56:58 -0700
committerDavid Heinemeier Hansson <david@loudthinking.com>2013-11-02 19:56:58 -0700
commit430b252d3d9bcf12951c2c58b744e83d43a34223 (patch)
tree13e6d6039c02a833c3db188bff3d6c06d7e3f043 /activerecord
parent661637e5b64dc1c277beb927059824ce4848ebab (diff)
downloadrails-430b252d3d9bcf12951c2c58b744e83d43a34223.tar.gz
rails-430b252d3d9bcf12951c2c58b744e83d43a34223.tar.bz2
rails-430b252d3d9bcf12951c2c58b744e83d43a34223.zip
Revert "ActiveRecord::Base#<=> has been removed. Primary keys may not be in order," -- will be replaced with a check to ensure that the keys used for comparison are integers, and only fail if they are not.
This reverts commit 6256734e2d0bdd89f4b5d11da259d40afa0c95c7. Conflicts: activerecord/CHANGELOG.md
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG.md12
-rw-r--r--activerecord/lib/active_record/core.rb9
-rw-r--r--activerecord/test/cases/base_test.rb7
3 files changed, 16 insertions, 12 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index f5b380b669..aa1e997ece 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -262,18 +262,6 @@
*kennyj*
-* ActiveRecord::Base#<=> has been removed. Primary keys may not be in order,
- or even be numbers, so sorting by id doesn't make sense. Please use `sort_by`
- and specify the attribute you wish to sort with. For example, change:
-
- Post.all.to_a.sort
-
- to:
-
- Post.all.to_a.sort_by(&:id)
-
- *Aaron Patterson*
-
* Fix: joins association, with defined in the scope block constraints by using several
where constraints and at least of them is not `Arel::Nodes::Equality`,
generates invalid SQL expression.
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb
index 366ebde418..d9cb14e4c6 100644
--- a/activerecord/lib/active_record/core.rb
+++ b/activerecord/lib/active_record/core.rb
@@ -310,6 +310,15 @@ module ActiveRecord
@attributes.frozen?
end
+ # Allows sort on objects
+ def <=>(other_object)
+ if other_object.is_a?(self.class)
+ self.to_key <=> other_object.to_key
+ else
+ super
+ end
+ end
+
# Returns +true+ if the record is read only. Records loaded through joins with piggy-back
# attributes will be marked as read only since they cannot be saved.
def readonly?
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index 82b20e8cee..d598eac26a 100644
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -554,6 +554,13 @@ class BasicsTest < ActiveRecord::TestCase
assert_equal [ Topic.find(1) ], [ Topic.find(2).topic ] & [ Topic.find(1) ]
end
+ def test_comparison
+ topic_1 = Topic.create!
+ topic_2 = Topic.create!
+
+ assert_equal [topic_2, topic_1].sort, [topic_1, topic_2]
+ end
+
def test_create_without_prepared_statement
topic = Topic.connection.unprepared_statement do
Topic.create(:title => 'foo')