aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2016-11-22 13:49:09 +0100
committerGitHub <noreply@github.com>2016-11-22 13:49:09 +0100
commit44087d88325be9e7b2e532b16c615e8be4eef13e (patch)
tree82bdbe113138eb08dfe3ab7e72ef5f353ef8e7ae /activerecord/lib
parentb89ddd421feed0a8dc45fb6a9a26dde34e3b7b9e (diff)
parent0e9957135d9057f91fe30af01d4a70e30ee8a6b3 (diff)
downloadrails-44087d88325be9e7b2e532b16c615e8be4eef13e.tar.gz
rails-44087d88325be9e7b2e532b16c615e8be4eef13e.tar.bz2
rails-44087d88325be9e7b2e532b16c615e8be4eef13e.zip
Merge pull request #27133 from rails/reload_singular_associations
Introduce `reload_<association>` reader for singular associations.
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/associations/builder/singular_association.rb11
-rw-r--r--activerecord/lib/active_record/associations/singular_association.rb7
2 files changed, 17 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/builder/singular_association.rb b/activerecord/lib/active_record/associations/builder/singular_association.rb
index bb96202a22..7732b63af6 100644
--- a/activerecord/lib/active_record/associations/builder/singular_association.rb
+++ b/activerecord/lib/active_record/associations/builder/singular_association.rb
@@ -8,7 +8,16 @@ module ActiveRecord::Associations::Builder # :nodoc:
def self.define_accessors(model, reflection)
super
- define_constructors(model.generated_association_methods, reflection.name) if reflection.constructable?
+ mixin = model.generated_association_methods
+ name = reflection.name
+
+ define_constructors(mixin, name) if reflection.constructable?
+
+ mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
+ def reload_#{name}
+ association(:#{name}).force_reload_reader
+ end
+ CODE
end
# Defines the (build|create)_association methods for belongs_to or has_one association
diff --git a/activerecord/lib/active_record/associations/singular_association.rb b/activerecord/lib/active_record/associations/singular_association.rb
index e386cc0e4c..1953cc6a72 100644
--- a/activerecord/lib/active_record/associations/singular_association.rb
+++ b/activerecord/lib/active_record/associations/singular_association.rb
@@ -30,6 +30,13 @@ module ActiveRecord
record
end
+ # Implements the reload reader method, e.g. foo.reload_bar for
+ # Foo.has_one :bar
+ def force_reload_reader
+ klass.uncached { reload }
+ target
+ end
+
private
def create_scope