我的网站包含用户个人资料,其中包含头发和眼睛颜色等字段。
我一直在用户模型中使用常量实现查找表类型字段,即
HAIR = %w[shaved black blond brown red grey white bald]
EYES = %w[black brown blue hazel green grey other]
在我的视图中使用collection_select语句来填充下拉列表。我用常量完成此操作是为了在每次查看用户配置文件时避免~10个额外的连接。
<%= f.collection_select :eyes, Profile::EYES, :to_s, .....
值在模型中存储为整数,即。 profile.hair = Profile :: HAIR.index(“red”)
我没有明显的缺点,不将这些数据存储在模型中(例如眼睛模型,头发模型) - 如果我希望基于eye = blue,hair = black执行搜索,这会对搜索速度产生很大的负面影响例如?
由于
答案 0 :(得分:1)
这是可以使用ActiveHash的一个很好的例子:
http://github.com/zilkey/active_hash
让我们创建漂亮的内存枚举模型来跟踪这些内容,这样可以让您在模型中创建有意义的关联。
答案 1 :(得分:0)
对于合理数量的数据,它不应对搜索速度产生太大影响。虽然您应该确保在头发和眼睛列上定义SQL索引,以便数据库更容易执行搜索。