我想将几个项目合并到一个lookups
表中,而不要拥有20多个单独的表,每个表都具有相同的属性:
在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
表中有2个“类型”的国家/地区。
[基本上,我只是“丢失”了我的数据,因为我将模型移到了另一个名称空间。我必须去更新所有的"Lookups::Country"
记录以具有"Addressess::Country"
的类型。
有什么办法可以避免这种情况?我将经常移动模型,直到它们成熟为止,并且每次我移动文件来简化开发人员的工作时,我都负担不起必须进行数据库更新/迁移。
为每个模型覆盖sti_name类方法可能有用。
尝试一下-
# app/models/addresses/country.rb
class Addressess::Country < Lookup
def self.sti_name
"Address"
end
end
这对我有用:https://gist.github.com/vamdt/75aca125883a88a9f1fd(请参见代码)