从静态值列表中选择建模

时间:2013-09-22 12:23:07

标签: ruby-on-rails postgresql activerecord pg-search

我有一个可能与零个或多个静态值相关联的模型。例如,电影和流派(恐怖,动作等)我想在我的模型上制作一个genres数组,但我不确定在数据库中反映这一点的最佳方法。

我正在使用Rails / AR 4和Postgres以及pg_search gem。

我可以选择创建genres表并在两者之间创建连接表的经典路径。然而,这看起来有点像矫枉过正,因为genres不会经常变化。

我可以创建一个genre枚举类型,然后在模型上创建一个genre数组,但我不确定Active Record支持这种机制的程度。

我需要能够根据流派以及其他标准(关键词,长度,等级等)搜索电影。

非常感谢任何最佳做法和/或资源。我错过了一个更简单或更直接的解决方案吗?以上任何一种都无法以我预期的方式解决我的问题吗?

1 个答案:

答案 0 :(得分:2)

我建议使用其他表而不是数组。

如果您想拥有自由文本,则可以使用数组。在这里,你真的想拥有资源。如果你有一个“scifi”类型,并且在意识到没有人知道科幻小说是什么之后,决定将其重命名为“scifi / fantastic”,你现在必须迭代所有电影并检查是否使用了科幻名称。

使用外表,这很容易。您的电影有一个genre_id列,您的流派行有一个名称列,您可以更改该列以更改所有电影。

对阵列的一个好用途是描述电影的详细和特殊属性,如大气特征,创新特性,以及任何可能不会用于多部电影并且应该被编辑得足够的东西的列表。

另请注意postgres数组支持is not perfect在rails中,就像现在一样,你可能需要处理一些小问题。