Rails STI覆盖所有子类的父类中的model_name

Ada*_*dam 4 routing model ruby-on-rails sti

我在Rails应用程序中使用STI,为了不必为所有子类定义路由,我在每个子类中添加以下内容:

def self.model_name
  Mapping.model_name
end
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,Mapping是父模型名称.例:

class UserMapping < Mapping; end
Run Code Online (Sandbox Code Playgroud)

必须将它放在每个子类中并不是很干,所以我正在寻找一种方法在父类中以某种方式设置它,以便从父类继承的每个类自动将模型名称设置为父模型名称.

也许甚至有更好的方法来克服由于与设置无关的STI引起的路由问题model_name- 我对建议持开放态度!

提前致谢!

Rya*_*ary 5

把它放在你的Mapping班上:

class Mapping < ActiveRecord::Base
  def self.inherited(subclass)
    super
    def subclass.model_name
      superclass.model_name
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

之后,所有子类也Mapping将继承父类model_name.