ruby-on-rails – ActiveRecord自定义类型命名方案

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – ActiveRecord自定义类型命名方案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在处理一个已经有一个具有自然类型名称的列的表.例如.已经存在一个名为’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

我仍然担心会遇到更多问题.这是正确的方法吗?

解决方法

我有类似的情况,并在此链接找到解决方案: https://gist.github.com/1381880
原文链接:https://www.f2er.com/ruby/267875.html

猜你在找的Ruby相关文章