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
This commit is contained in:
parent
a3e57ad11e
commit
220a64e9b6
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue