用户配置文件查找表值作为常量(非规范化)或模型(规范化)

时间:2010-07-08 10:22:55

标签: ruby-on-rails ruby

我的网站包含用户个人资料,其中包含头发和眼睛颜色等字段。

我一直在用户模型中使用常量实现查找表类型字段,即

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执行搜索,这会对搜索速度产生很大的负面影响例如?

由于

2 个答案:

答案 0 :(得分:1)

这是可以使用ActiveHash的一个很好的例子:

http://github.com/zilkey/active_hash

让我们创建漂亮的内存枚举模型来跟踪这些内容,这样可以让您在模型中创建有意义的关联。

答案 1 :(得分:0)

对于合理数量的数据,它不应对搜索速度产生太大影响。虽然您应该确保在头发和眼睛列上定义SQL索引,以便数据库更容易执行搜索。