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