aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/reflection.rb
diff options
context:
space:
mode:
authorKir Shatrov <shatrov@me.com>2017-01-03 10:12:47 -0500
committerKir Shatrov <shatrov@me.com>2017-01-09 13:08:33 -0500
commit8312a0d22212798864f142b5a94805e0baa6c562 (patch)
tree3ce858cb37e94783c75d6eda171a6dc4d3b2dae6 /activerecord/lib/active_record/reflection.rb
parent80bf3384152a640a36682db875241e2d92db511f (diff)
downloadrails-8312a0d22212798864f142b5a94805e0baa6c562.tar.gz
rails-8312a0d22212798864f142b5a94805e0baa6c562.tar.bz2
rails-8312a0d22212798864f142b5a94805e0baa6c562.zip
Deprecate reflection class name to accept a class
The idea of `class_name` as an option of reflection is that passing a string would allow us to lazy autoload the class. Using `belongs_to :client, class_name: Customer` is eagerloading models more than necessary and creating possible circular dependencies.
Diffstat (limited to 'activerecord/lib/active_record/reflection.rb')
-rw-r--r--activerecord/lib/active_record/reflection.rb11
1 files changed, 11 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb
index 72f1ac4896..2da85df9e9 100644
--- a/activerecord/lib/active_record/reflection.rb
+++ b/activerecord/lib/active_record/reflection.rb
@@ -364,6 +364,17 @@ module ActiveRecord
@constructable = calculate_constructable(macro, options)
@association_scope_cache = {}
@scope_lock = Mutex.new
+
+ if options[:class_name] && options[:class_name].class == Class
+ ActiveSupport::Deprecation.warn(<<-MSG.squish)
+ Passing a class to the `class_name` is deprecated and will raise
+ an ArgumentError in Rails 5.2. It eagerloads more classes than
+ necessary and potentially creates circular dependencies.
+
+ Please pass the class name as a string:
+ `belongs_to :client, class_name: 'Company'`
+ MSG
+ end
end
def association_scope_cache(conn, owner)