Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add workaround and deprecation if the inherited hook is not executed.…

… Closes #4757.
  • Loading branch information...
commit 0bfc504d9ced49d50afa7a8b19680ae7f42c2b24 1 parent c472843
@jonleighton jonleighton authored
View
12 activerecord/lib/active_record/attribute_methods.rb
@@ -36,6 +36,18 @@ module ClassMethods
# Generates all the attribute related methods for columns in the database
# accessors, mutators and query methods.
def define_attribute_methods
+ unless defined?(@attribute_methods_mutex)
+ ActiveSupport::Deprecation.warn(
+ "It looks like something (probably a gem/plugin) is removing or overriding the " \
+ "ActiveRecord::Base.inherited method. It is important that this hook executes so " \
+ "that your models are set up correctly. A workaround has been added to stop this " \
+ "causing an error in 3.2, but future versions will simply not work if the hook is " \
+ "overridden."
+ )
+
+ @attribute_methods_mutex = Mutex.new
+ end
+
# Use a mutex; we don't want two thread simaltaneously trying to define
# attribute methods.
@attribute_methods_mutex.synchronize do
View
10 activerecord/test/cases/attribute_methods_test.rb
@@ -770,6 +770,16 @@ def title=(val); self.author_name = val; end
assert_equal "lol", topic.author_name
end
+ def test_inherited_hook_removed
+ parent = Class.new(ActiveRecord::Base)
+ parent.table_name = "posts"
+ def parent.inherited(k)
+ end
+
+ klass = Class.new(parent)
+ assert_deprecated { klass.define_attribute_methods }
+ end
+
private
def cached_columns
@cached_columns ||= time_related_columns_on_topic.map(&:name)
Please sign in to comment.
Something went wrong with that request. Please try again.