aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-09-28 17:22:01 -0700
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-09-28 17:22:01 -0700
commit54c05acdba138f3a7a3d44dfc922b0fe4e4cf554 (patch)
tree47fc4839934b50dba846ea56f0851bbd23d23730 /activerecord/lib/active_record/associations
parent50a96446bce10232bc70a7f4ef1c2d5f2018914e (diff)
parentfed6ac9c66e87d120098b3a4ffb15699d0ee6863 (diff)
downloadrails-54c05acdba138f3a7a3d44dfc922b0fe4e4cf554.tar.gz
rails-54c05acdba138f3a7a3d44dfc922b0fe4e4cf554.tar.bz2
rails-54c05acdba138f3a7a3d44dfc922b0fe4e4cf554.zip
Merge pull request #12375 from arthurnn/inverse_after_find_or_initialize
Inverse after find or initialize
Diffstat (limited to 'activerecord/lib/active_record/associations')
-rw-r--r--activerecord/lib/active_record/associations/collection_proxy.rb10
1 files changed, 6 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/associations/collection_proxy.rb b/activerecord/lib/active_record/associations/collection_proxy.rb
index 416a5823c6..62cdb1ea87 100644
--- a/activerecord/lib/active_record/associations/collection_proxy.rb
+++ b/activerecord/lib/active_record/associations/collection_proxy.rb
@@ -77,10 +77,12 @@ module ActiveRecord
def method_missing(method, *args, &block)
match = DynamicFinderMatch.match(method)
if match && match.instantiator?
- send(:find_or_instantiator_by_attributes, match, match.attribute_names, *args) do |r|
- proxy_association.send :set_owner_attributes, r
- proxy_association.send :add_to_target, r
- yield(r) if block_given?
+ send(:find_or_instantiator_by_attributes, match, match.attribute_names, *args) do |record|
+ proxy_association.send :set_owner_attributes, record
+ proxy_association.send :add_to_target, record
+ yield(record) if block_given?
+ end.tap do |record|
+ proxy_association.send :set_inverse_instance, record
end
elsif target.respond_to?(method) || (!proxy_association.klass.respond_to?(method) && Class.respond_to?(method))