diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2007-12-10 01:07:04 +0000 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2007-12-10 01:07:04 +0000 |
commit | 220a64e9b6f7a3745b776c731c8233d6186e2d59 (patch) | |
tree | dad5dfd2e763cf88123ce01acb04e59d8a7043ba | |
parent | a3e57ad11ece0238849747f22d355747a81eb281 (diff) | |
download | rails-220a64e9b6f7a3745b776c731c8233d6186e2d59.tar.gz rails-220a64e9b6f7a3745b776c731c8233d6186e2d59.tar.bz2 rails-220a64e9b6f7a3745b776c731c8233d6186e2d59.zip |
post.comments.reload returns the association rather than the result of load_target. Closes #10438 [Fred Cheung]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8347 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r-- | activerecord/lib/active_record/associations/association_proxy.rb | 29 | ||||
-rwxr-xr-x | activerecord/test/associations_test.rb | 7 |
2 files changed, 22 insertions, 14 deletions
diff --git a/activerecord/lib/active_record/associations/association_proxy.rb b/activerecord/lib/active_record/associations/association_proxy.rb index 1e4414cfe3..ed1dd36f75 100644 --- a/activerecord/lib/active_record/associations/association_proxy.rb +++ b/activerecord/lib/active_record/associations/association_proxy.rb @@ -12,15 +12,15 @@ module ActiveRecord Array(reflection.options[:extend]).each { |ext| proxy_extend(ext) } reset end - + def proxy_owner @owner end - + def proxy_reflection @reflection end - + def proxy_target @target end @@ -28,23 +28,23 @@ module ActiveRecord def respond_to?(symbol, include_priv = false) proxy_respond_to?(symbol, include_priv) || (load_target && @target.respond_to?(symbol, include_priv)) end - + # Explicitly proxy === because the instance method removal above # doesn't catch it. def ===(other) load_target other === @target end - + def aliased_table_name @reflection.klass.table_name end - + def conditions @conditions ||= interpolate_sql(sanitize_sql(@reflection.options[:conditions])) if @reflection.options[:conditions] end alias :sql_conditions :conditions - + def reset @loaded = false @target = nil @@ -53,25 +53,26 @@ module ActiveRecord def reload reset load_target + self unless @target.nil? end def loaded? @loaded end - + def loaded @loaded = true end - + def target @target end - + def target=(target) @target = target loaded end - + def inspect reload unless loaded? @target.inspect @@ -81,7 +82,7 @@ module ActiveRecord def dependent? @reflection.options[:dependent] end - + def quoted_record_ids(records) records.map { |record| record.quoted_id }.join(',') end @@ -117,10 +118,10 @@ module ActiveRecord :select => @reflection.options[:select] ) end - + private def method_missing(method, *args, &block) - if load_target + if load_target @target.send(method, *args, &block) end end diff --git a/activerecord/test/associations_test.rb b/activerecord/test/associations_test.rb index 42e3e09187..64dc34066a 100755 --- a/activerecord/test/associations_test.rb +++ b/activerecord/test/associations_test.rb @@ -133,6 +133,13 @@ class AssociationProxyTest < Test::Unit::TestCase assert_nil p.author.reset end + def test_reload_returns_assocition + david = developers(:david) + assert_nothing_raised do + assert_equal david.projects, david.projects.reload.reload + end + end + def setup_dangling_association josh = Author.create(:name => "Josh") p = Post.create(:title => "New on Edge", :body => "More cool stuff!", :author => josh) |