我正在处理一个已经有一个具有自然类型名称的列的表.例如.已经存在一个名为’provider’的列,其值为’foo’或’bar’.我想使用现有的类型名称在此表上使用STI,因为为Active Record添加一个名为“type”的附加列似乎很愚蠢.问题是,这些类型名称与
ruby类完全不匹配.我希望能够设置自定义映射,例如Class1 => foo,Class2 =>酒吧.
我尝试了以下方法:
# In the base class set_inheritance_column :provider # In Class1 def self.sti_name 'foo' end # In Class2 def self.sti_name 'bar' end
但这似乎没有削减它,我得到:
The single-table inheritance mechanism Failed to locate the subclass: 'foo' ... activerecord (3.0.8) lib/active_record/base.rb:923:in `find_sti_class'
看起来ActiveRecord只能处理完整的类名和解密的类名.我不确定具有受保护的sti_name方法的目的是什么.
我将深入挖掘框架并覆盖ActiveRecord :: Base.compute_type.在我这样做之前,有没有人这样做过?这是一场野鹅追逐吗?
rails可以处理自定义类型名称还是我坚持使用Ruby类名?
更新
我得到了这个:
# In the base class def self.find_sti_class(type_name) # Do mapping from foo/bar to Class1/Class2 ... end
我仍然担心会遇到更多问题.这是正确的方法吗?