RoR中的序列化 - 结构,哈希,?

时间:2012-01-25 19:39:44

标签: ruby-on-rails database serialization hash struct

寻找有关如何存储我的RoR数据的一些建议。从本质上讲,我需要跟踪20个左右的项目(永远不会超过50个)。每个项目在每天的每个时间(上午,下午,晚上之一)都有不同的X,Y坐标,并且七个工作日中的每一个都有不同的时间表(基本上,每天的每个时间有21个不同的x,y点) /星期组合)。它还有一些静态值,例如名称,类别和诸如此类的东西。

现在我正在尝试决定如何存储它,这21个不同的x,y点。我想在频谱上有两个相反的极端 - 或者(a)存储每个字段,如wednesday_afternoon_x,wednesday_afternoon_y等,或者(b)序列化并存储为散列/结构,如x.wednesday.afternoon等。第三种选择甚至可能是将它们分解为单独的表(即具有:tuesday_item,:wednesday_item模型等)

我需要做的一件事就是按字段搜索/过滤 - 例如,如果我想获取给定TimeOfDay和DayOfWeek的特定类别中的项目。

有关于我应该如何进行的建议吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我使用两个数据库表,一个用于项目,一个用于坐标。架构然后很简单:

create_table :items do |t|
  t.string :name
  t.string :category
  t.string :whatnot
end

create_table :item_coordinates do |t|
  t.references :item
  t.integer :x
  t.integer :y
  t.string :time_of_day
  t.string :weekday
end

[更新:当您实际创建这些迁移时,请不要忘记添加索引!对于item_coordinates,您可能需要[:item_id, :weekday, :time_of_day]上的联合索引,但不要相信我的话 - 弄清楚您最终使用哪些字段作为键并将其编入索引。]

您的Item模型has_many :item_coordinatesItemCoordinate模型belong_to :item

然后您可以使用所有常规的ActiveRecord方法。例如,要在此系统下轻松获取特定坐标:

item_coordinate = Item.find(item_id).item_coordinates.where(:time_of_day => 'afternoon', :weekday => 'wednesday')
coords = [item_coordinate.x, item_coordinate.y]