2012-05-23 3 views
4

В моделях моего единственного стола Inheritance я переопределяю метод inherited в базовой модели, так что все модели потомков распознаются именем базовой модели. Следующий код используется для добавления переопределения к методу model_name для всех унаследованных классов.Предупреждение об устаревании с обходным решением model_name STI

def self.inherited(child) 
    child.instance_eval do 
     def model_name 
     BaesModelDefinition.model_name 
     end 
    end 
    end 

Я заметил, что это продуцирующие предупреждения устаревания в Rails 3.2.3:

DEPRECATION WARNING: It looks like something (probably a gem/plugin) is 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. 

есть другой подход, который я могу использовать, чтобы решить проблему MODEL_NAME?

ответ

5

Ответ оказался простым. Просто добавьте super в метод переопределения.

def self.inherited(child) 
    child.instance_eval do 
     def model_name 
     BaesModelDefinition.model_name 
     end 
    end 
    super 
    end 
+1

Вы имеете в виду 'super (child)' –

+1

'super' будет передавать параметры по умолчанию – montrealmike

Смежные вопросы