Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails 4:单表继承,不使用类名作为;“类型”;_Ruby On Rails 4_Namespaces_Data Migration_Sti - Fatal编程技术网

Ruby on rails 4 Rails 4:单表继承,不使用类名作为;“类型”;

Ruby on rails 4 Rails 4:单表继承,不使用类名作为;“类型”;,ruby-on-rails-4,namespaces,data-migration,sti,Ruby On Rails 4,Namespaces,Data Migration,Sti,我想将几个项目合并到一个查找表中,而不是20多个单独的表,每个表都具有相同的属性: 国家 州 电子邮件类型 电话类型 地址类型 等等 在Rails中,我只需将type列添加到lookups表中,它就“神奇地”工作了 然而,为了便于开发人员使用,我对一些模型进行了命名,因为它变得有点混乱: # app/models/lookup.rb class Lookup < ActiveRecord::Base end # app/models/lookups/country.rb class

我想将几个项目合并到一个
查找表中,而不是20多个单独的表,每个表都具有相同的属性:

  • 国家
  • 电子邮件类型
  • 电话类型
  • 地址类型
  • 等等
在Rails中,我只需将
type
列添加到
lookups
表中,它就“神奇地”工作了

然而,为了便于开发人员使用,我对一些模型进行了命名,因为它变得有点混乱:

# app/models/lookup.rb
class Lookup < ActiveRecord::Base
end

# app/models/lookups/country.rb
class Lookups::Country < Lookup
end
更改名称空间的唯一原因是随着项目越来越大而重新组织项目

因此,当我现在
address::Country.create(name:“Italy”)
时,它存储了
类型的
“address:Country”
。现在的问题是
查找表中有两种“类型”的国家

基本上,我只是“丢失”了数据,因为我将一个模型移动到了另一个名称空间。我必须去更新所有的
“Lookups::Country”
记录,以获得一种
“address::Country”


有没有办法避免这种情况?我将频繁地移动模型,直到它们组织成熟为止,而且我无法承担每次移动文件时都必须进行数据库更新/迁移,以简化开发人员的工作。

为每个模型重写sti_name类方法可能会行得通

试试这个-

# app/models/addresses/country.rb
class Addressess::Country < Lookup
    def self.sti_name
        "Address"
    end
end
#app/models/address/country.rb
类地址::国家<查找
def self.sti_名称
“地址”
结束
结束
这对我很有用: (见守则)

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