1

我正在尝试在 Rails 中构建一个系统,其中我有一个带有“类型”列的项目模型,我不确定是否应该将类型作为字符串显式存储在项目表中,或者我是否应该应该存储一个 type_id 。问题是,我觉得创建类型模型会很愚蠢;类型不能被创建或销毁,它们的数量只是固定的。但是,如果我不创建模型,我能想到的唯一其他方法是在 /lib 中创建一个具有 get_name(type_id) 方法的 Type 类,这似乎完全是矫枉过正。

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

有什么想法吗?

4

1 回答 1

1

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

这是一个示例(当然未经测试),我调用该列category_id以避免使用type会导致问题的名称,如 rjz 所说

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.

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

于 2012-05-26T23:42:42.847 回答