提取ActiveRecord属性

时间:2011-05-06 17:19:04

标签: ruby-on-rails activerecord abstraction abstract-data-type

在不进一步规范化数据库的情况下抽象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的表来规范化数据库。这个例子是假设的,我目前没有现实世界的例子;我只是想知道我怎么可能这样做。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果您不打算对街道,门牌号码,城市等进行同样的操作,我认为将邮政编码抽象出来是有意义的。您已将其作为地址中的单独列。 table,所以将它存储在自己的类中是没有意义的(从ActiveRecord的角度来看)。或者,如果您将邮政编码存储在他们自己的表中(因此也就是类),那么您获得了什么?在我看来,将单个属性保存在单独的类/表中是太过分了,如果它有意义成为它当前所在聚合的一部分。

答案 1 :(得分:0)

我不确定你为什么要为你所讨论的ZipCode做这个,但为了回答你的问题,你应该考虑使用Rails Aggregations。

这是文档:

http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html

如果您对要完成的事情有具体问题,请告诉我,我可以尝试回答这些具体问题。