5

私の単一テーブル継承モデルではinherited、すべての子孫モデルがベースモデルの名前で認識されるように、ベースモデルのメソッドをオーバーライドしています。次のコードは、継承されたすべてのクラスのmodel_nameメソッドにオーバーライドを追加するために使用されます。

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

これがRails3.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の問題を修正するために使用できる別のアプローチはありますか?

4

1 に答える 1

6

答えは簡単であることがわかりました。superオーバーライドするメソッドにを追加するだけです。

  def self.inherited(child)
    child.instance_eval do
      def model_name
        BaesModelDefinition.model_name
      end
    end
    super
  end
于 2012-05-27T13:21:28.237 に答える