如何使用AR处理类型/代码列(非STI)?

时间:2011-03-08 20:19:39

标签: ruby activerecord

我和一位同事正在讨论这种模式,每个人似乎都有自己的看法。使用类型/代码属性的想法似乎是一个非常常见的情况,没有标准化的解决方案。我想知道你的是什么?

假设您在ActiveRecord模型上有非单表继承类型/代码列。你用什么来指定类型和创建访问器,范围等。符号的哈希,代码的哈希,普通的常量或......?

如下所示:

class Listing < ActiveRecord::Base
  LISTING_TYPES = {
    :sale  => 1,
    :rent  => 2,
    :lease => 3,
  }

  validates :listing_type, :inclusion => {:in => LISTING_TYPES.values}
end

提前致谢。

1 个答案:

答案 0 :(得分:1)

我使用simple_enum宝石。

class Listing < ActiveRecord::Base
  as_enum :types, {:sale => 0, :rent => 1, :lease => 2}
end

gem会为您创建所有查找程序,以便您可以按类型而不是索引进行查询:

Listing.find_by_type(:sale)