diff options
author | Damien Mathieu <42@dmathieu.com> | 2012-07-06 16:53:33 +0200 |
---|---|---|
committer | Damien Mathieu <42@dmathieu.com> | 2012-07-06 20:04:38 +0200 |
commit | 7d0053e6a716be6345daa5e49dceda27ba8dfdb6 (patch) | |
tree | cdc268f748bf4426bb751dff41c18112193b06de | |
parent | 717aa92dd3f75dec04652940d5571ab34a2f79c3 (diff) | |
download | rails-7d0053e6a716be6345daa5e49dceda27ba8dfdb6.tar.gz rails-7d0053e6a716be6345daa5e49dceda27ba8dfdb6.tar.bz2 rails-7d0053e6a716be6345daa5e49dceda27ba8dfdb6.zip |
Limit the number of records in Relation#inspect
While it's interesting to have the results array, it can make a console or a webpage freeze if there are a lot of them.
So this limits the number of records displayed in #inspect to 10 and tells how much were effectively found.
-rw-r--r-- | activerecord/CHANGELOG.md | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 14 | ||||
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 5 |
3 files changed, 22 insertions, 3 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index ccaa2ad8f1..95967c61ee 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -24,12 +24,14 @@ dealing with a `Relation` object rather than an array:. User.where(:age => 30).inspect - # => <ActiveRecord::Relation [#<User ...>, #<User ...>]> + # => <ActiveRecord::Relation [#<User ...>, #<User ...>] ...> User.where(:age => 30).to_a.inspect # => [#<User ...>, #<User ...>] - *Brian Cardarella & Jon Leighton* + The number of records displayed will be limited to 10. + + *Brian Cardarella, Jon Leighton & Damien Mathieu* * Add `collation` and `ctype` support to PostgreSQL. These are available for PostgreSQL 8.4 or later. Example: diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index 7725331694..dc00448dff 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -515,7 +515,19 @@ module ActiveRecord end def inspect - "#<#{self.class.name} #{to_a.inspect}>" + text = if limit_value && limit_value <= 10 + to_a.inspect + else + entries = limit(11).to_a + if entries.size > 10 + entries.pop + "[#{entries.map(&:inspect).join(', ')}, ...]" + else + entries.inspect + end + end + + "#<#{self.class.name} #{text}>" end private diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 7fdd42f150..bdf14e0a85 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -1316,4 +1316,9 @@ class RelationTest < ActiveRecord::TestCase relation = Post.limit(2) assert_equal "#<ActiveRecord::Relation [#{Post.limit(2).map(&:inspect).join(', ')}]>", relation.inspect end + + test "relations limits the records in #inspect at 10" do + relation = Post.limit(11) + assert_equal "#<ActiveRecord::Relation [#{Post.limit(10).map(&:inspect).join(', ')}, ...]>", relation.inspect + end end |