我正在尝试在Rails中构建一个系统,其中我有一个带有“type”列的Project模型,我不确定是否应该在project表中将该类型显式存储为字符串,或者如果我应该存储一个type_id。问题是,我觉得创建一个类型模型是愚蠢的;无法创建或销毁类型,只有固定数量的类型。但是如果我不创建模型,我能想到的另一种方法就是在/ lib中创建一个带有get_name(type_id)方法的Type类,这看起来像是一种过度杀伤。
如果我决定只存储字符串,我会使用不必要的空间,按类型过滤会很奇怪。
有什么想法吗?
答案 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>
我认为这是一个非常明确的解决方案,但如果您的需求发生变化(他们始终更改...),您必须创建一个模型并插入这些项目类别来维护这些标识符。