加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 21:10:21 所属栏目:百科 来源:网络整理
导读:我正在处理一个已经有一个具有自然类型名称的列的表.例如.已经存在一个名为’provider’的列,其值为’foo’或’bar’.我想使用现有的类型名称在此表上使用STI,因为为Active Record添加一个名为“type”的附加列似乎很愚蠢.问题是,这些类型名称与 ruby类完全
我正在处理一个已经有一个具有自然类型名称的列的表.例如.已经存在一个名为’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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读