diff options
author | Jon Leighton <j@jonathanleighton.com> | 2012-07-06 10:39:46 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2012-07-06 10:39:46 +0100 |
commit | 07314e64fd62fb8e6165c8c539420160da9437e9 (patch) | |
tree | 2c08917ba9db29d9fd6dffd9174019066f51d0c9 /activerecord | |
parent | 8ce61a366474b20368f60eb1c7bf31c3b7297873 (diff) | |
download | rails-07314e64fd62fb8e6165c8c539420160da9437e9.tar.gz rails-07314e64fd62fb8e6165c8c539420160da9437e9.tar.bz2 rails-07314e64fd62fb8e6165c8c539420160da9437e9.zip |
Show the records in Relation#inspect
The reason for removing the previous implementation of `#inspect` was
that it hid from you that you were dealing with a `Relation` rather than
an `Array`.
But it is still useful to be able to see the records, particularly if you're
writing something like the following in tests:
assert_equal [foo], Post.where(:bar)
If the assertion fails, you want to see what records were actually
loaded.
So this implementation makes it clear that you've got a `Relation`, but
also shows your records.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 14 | ||||
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 5 |
3 files changed, 17 insertions, 6 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 32261ba9e6..a5c4c36a55 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -20,14 +20,16 @@ *Aleksey Magusev* -* `ActiveRelation#inspect` no longer calls `#to_a`. This means that in places - where `#inspect` is implied (such as in the console), creating a relation - will not execute it anymore, you'll have to call `#to_a` when necessary: +* `ActiveRecord::Relation#inspect` now makes it clear that you are + dealing with a `Relation` object rather than an array:. - User.where(:age => 30) # => returns the relation - User.where(:age => 30).to_a # => executes the query and returns the loaded objects, as before + User.where(:age => 30).inspect + # => <ActiveRecord::Relation [#<User ...>, #<User ...>]> - *Brian Cardarella* + User.where(:age => 30).to_a.inspect + # => [#<User ...>, #<User ...>] + + *Brian Cardarella & Jon Leighton* * 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 e268d451e0..7725331694 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -514,6 +514,10 @@ module ActiveRecord @values.dup end + def inspect + "#<#{self.class.name} #{to_a.inspect}>" + end + private def references_eager_loaded_tables? diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 8544d36aa8..7fdd42f150 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -1311,4 +1311,9 @@ class RelationTest < ActiveRecord::TestCase relation.merge! where: 'foo' end end + + test "relations show the records in #inspect" do + relation = Post.limit(2) + assert_equal "#<ActiveRecord::Relation [#{Post.limit(2).map(&:inspect).join(', ')}]>", relation.inspect + end end |