gpt4 book ai didi

ruby-on-rails-4 - 导轨 4 : single-table inheritance and NOT using class name as "type"

转载 作者:行者123 更新时间:2023-12-04 16:52:14 24 4
gpt4 key购买 nike

我有几个项目想合并成一个 lookups table 而不是有 20 多个单独的表,每个表都具有相同的属性:

  • 国家
  • email_types
  • 电话类型
  • 地址类型
  • 等等...

  • 在 Rails 中,我只添加了 type列到 lookups表,它“神奇地”起作用。

    但是,为了开发人员的易用性,我为一些模型命名了命名空间,因为它变得有点困惑:
    # app/models/lookup.rb
    class Lookup < ActiveRecord::Base
    end

    # app/models/lookups/country.rb
    class Lookups::Country < Lookup
    end

    所以当我 Lookups::Country.create(name: "Italy") ,它存储一个 type"Lookups::Country" .

    但是作为所有优秀的开发人员,我最终会进行一些重构,而不是将所有查找都扔到一个 app/models/lookups 中。命名空间,我想将它们分解为各种元素:
    # app/models/addresses/country.rb
    class Addressess::Country < Lookup
    end

    更改命名空间的唯一原因是随着项目越来越大而重新组织项目。

    所以当我 Addressess::Country.create(name: "Italy")现在,它存储了一个 type"Addressess:Country" .问题是现在在 lookups 中有两种“类型”的国家 table 。

    基本上,我只是“丢失”了我的数据,因为我将模型移动到了不同的命名空间。我将不得不去更新所有 "Lookups::Country"记录类型为 "Addressess::Country" .

    有什么办法可以避免这种情况吗?我会经常移动模型,直到它们被组织成熟,并且无法承受每次移动文件时都必须进行数据库更新/迁移以使开发人员的生活更简单。

    最佳答案

    覆盖每个模型的 sti_name 类方法可能会起作用。

    试试这个 -

    # app/models/addresses/country.rb
    class Addressess::Country < Lookup
    def self.sti_name
    "Address"
    end
    end

    关于ruby-on-rails-4 - 导轨 4 : single-table inheritance and NOT using class name as "type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654557/

    24 4 0