diff options
author | Kir Shatrov <shatrov@me.com> | 2017-01-03 10:12:47 -0500 |
---|---|---|
committer | Kir Shatrov <shatrov@me.com> | 2017-01-09 13:08:33 -0500 |
commit | 8312a0d22212798864f142b5a94805e0baa6c562 (patch) | |
tree | 3ce858cb37e94783c75d6eda171a6dc4d3b2dae6 /activerecord/lib | |
parent | 80bf3384152a640a36682db875241e2d92db511f (diff) | |
download | rails-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')
-rw-r--r-- | activerecord/lib/active_record/reflection.rb | 11 |
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) |