Rails模型:“有很多”*简单*属性

时间:2009-12-13 02:51:46

标签: ruby-on-rails activerecord

我们假设这个模型:

Movie
- Title: String
- Has many:
    - Alternative Title: String

我的问题是,我应该如何存储alt。标题属性?我决定采用三种方法:

  • 单独的AR模型:可能是矫枉过正
  • CSV in signle DB列
  • 单个数据库列中的序列化数组

后两者似乎在逻辑上是等同的。我倾向于CSV方法。任何人都可以就此提出一些建议吗?对速度和可搜索性有什么影响?

3 个答案:

答案 0 :(得分:2)

如果一部电影可以有很多标题,那么拥有标题模型并为电影模型提供has_many :titles关系是最有意义的,特别是如果您稍后决定添加更多关于标题的元数据。这似乎有点矫枉过正,但从长远来看,我认为这将是最不麻烦的事情。此外,我认为电影的“主要”标题也应该是一个标题对象,可能带有is_main_title或类似的属性,以区别于其他标题。

答案 1 :(得分:0)

如果大部分时间只使用主要标题,我会使用您的CSV选项。

如果大部分时间都使用了所有标题,我会将所有标题(主要和次要)放在一个CSV列(名为“标题”)中,并在需要主要标题时获取第一个标题(使用辅助功能)。

为什么呢? 因为它使事情变得简单 - 如果时间已经到来,就像乔丹所说,你需要另一个属性,你总是可以迁移到一个单独的模型。

在此之前,YAGNI

答案 2 :(得分:0)

我也会投票给一个单独的模型,即使看起来有点过分它会让你基本上按照最简单的Rails方式。但是,如果你选择不获得与关联相关的魔法所带来的好处,那么我会建议使用YAML或JSON而不是CSV。 CSV很简单,但Rails已经支持YAML序列化,可能是最简单的解决方案。查看RDoc on #serialize。对于给定的示例,这基本上等于:

class Movie < ActiveRecord::Base
  serialize :alternate_titles
end

有了这个,Rails会为你处理很多苦差事,你会有一系列很好的备用游戏。