可能不需要数据库的Rails模型的实现

时间:2012-05-23 23:27:20

标签: ruby-on-rails types model

我正在尝试在Rails中构建一个系统,其中我有一个带有“type”列的Project模型,我不确定是否应该在project表中将该类型显式存储为字符串,或者如果我应该存储一个type_id。问题是,我觉得创建一个类型模型是愚蠢的;无法创建或销毁类型,只有固定数量的类型。但是如果我不创建模型,我能想到的另一种方法就是在/ lib中创建一个带有get_name(type_id)方法的Type类,这看起来像是一种过度杀伤。

如果我决定只存储字符串,我会使用不必要的空间,按类型过滤会很奇怪。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您确定类型是固定集,则可以在Project模型中定义一些数字常量,并将这些数字存储在projects表的列中。

这是一个示例(当然没有经过测试)我调用列category_id以避免使用会导致问题的type名称as rjz said

class Project < ActiveRecord::Base
  # Project categories are constants
  CHEAP_PROJECT = 1
  SOUND_PROJECT = 2
  GRAPHIC_PROJECT = 3
  SECRET_PROJECT = 4

  # Force project_category_id to be a valid category identifier
  validates :category_id, :inclusion => {:in => 1..4}

  # At this point you can use the constants
  # Here an example of a scope to get the secret projects
  scope :secret_projects, where(:category_id => SECRET_PROJECT)
end

确保将category_id值验证为您定义的值之一。 一旦掌握了这些常量,您甚至可以使用Project::SOUND_PROJECT等其他地方使用。{/ p>

我认为这是一个非常明确的解决方案,但如果您的需求发生变化(他们始终更改...),您必须创建一个模型并插入这些项目类别来维护这些标识符。