Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Don't inspect unloaded associations. Closes #2905.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5478 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit 63df6eb3821ba9723a3478f6331bd14b81be8140 1 parent d97a84f
@jeremy jeremy authored
View
2  activerecord/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Don't inspect unloaded associations. #2905 [lmarlow]
+
* SQLite: use AUTOINCREMENT primary key in >= 3.1.0. #6588 [careo]
* Cache inheritance_column. #6592 [Stefan Kaes]
View
4 activerecord/lib/active_record/associations/association_proxy.rb
@@ -72,6 +72,10 @@ def target=(target)
loaded
end
+ def inspect
+ loaded? ? @target.inspect : "<#{@reflection.name} not loaded yet>"
+ end
+
protected
def dependent?
@reflection.options[:dependent] || false
View
29 activerecord/test/associations_test.rb
@@ -87,6 +87,35 @@ def test_proxy_accessors
david.posts_with_extension.first # force load target
assert_equal david.posts_with_extension, david.posts_with_extension.testing_proxy_target
end
+
+ def test_inspect_does_not_load_target
+ david = authors(:david)
+ not_loaded_string = '<posts not loaded yet>'
+ not_loaded_re = Regexp.new(not_loaded_string)
+
+ 2.times do
+ assert !david.posts.loaded?, "Posts should not be loaded yet"
+ assert_match not_loaded_re, david.inspect
+ assert_equal not_loaded_string, david.posts.inspect
+
+ assert !david.posts.empty?, "There should be more than one post"
+ assert !david.posts.loaded?, "Posts should still not be loaded yet"
+ assert_match not_loaded_re, david.inspect
+ assert_equal not_loaded_string, david.posts.inspect
+
+ assert !david.posts.find(:all).empty?, "There should be more than one post"
+ assert !david.posts.loaded?, "Posts should still not be loaded yet"
+ assert_match not_loaded_re, david.inspect
+ assert_equal not_loaded_string, david.posts.inspect
+
+ assert !david.posts(true).empty?, "There should be more than one post"
+ assert david.posts.loaded?, "Posts should be loaded now"
+ assert_no_match not_loaded_re, david.inspect
+ assert_not_equal not_loaded_string, david.posts.inspect
+
+ david.reload
+ end
+ end
end
class HasOneAssociationsTest < Test::Unit::TestCase
Please sign in to comment.
Something went wrong with that request. Please try again.