在不进一步规范化数据库的情况下抽象ActiveRecord属性的最佳方法是什么?
例如,让我们假设一个名为addresses
的数据库表,其中包含一列zip_code
,以及一种确定邮政编码是否有效的方法:
class Address < ActiveRecord::Base
def zip_code_valid?
..
end
end
我更愿意:
class Address < ActiveRecord::Base
..
end
class ZipCode
def valid?
..
end
end
当我执行Address.find(1).zip_code
时,它会返回ZipCode
与字符串的对比。我不希望通过创建一个名为zip_codes
的表来规范化数据库。这个例子是假设的,我目前没有现实世界的例子;我只是想知道我怎么可能这样做。
谢谢。
答案 0 :(得分:0)
如果您不打算对街道,门牌号码,城市等进行同样的操作,我认为将邮政编码抽象出来是有意义的。您已将其作为地址中的单独列。 table,所以将它存储在自己的类中是没有意义的(从ActiveRecord的角度来看)。或者,如果您将邮政编码存储在他们自己的表中(因此也就是类),那么您获得了什么?在我看来,将单个属性保存在单独的类/表中是太过分了,如果它有意义成为它当前所在聚合的一部分。
答案 1 :(得分:0)
我不确定你为什么要为你所讨论的ZipCode
做这个,但为了回答你的问题,你应该考虑使用Rails Aggregations。
这是文档:
http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html
如果您对要完成的事情有具体问题,请告诉我,我可以尝试回答这些具体问题。