【问题标题】:Serialization in RoR - structs, hashes,?RoR中的序列化 - 结构,哈希,?
【发布时间】:2012-02-19 00:24:58
【问题描述】:

寻找一些关于如何存储我的 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 的特定类别中的项目。

对于我应该如何进行有什么建议吗?谢谢!

【问题讨论】:

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


    【解决方案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_coordinates,而您的ItemCoordinate 模型将是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]
    

    【讨论】:

    • 天哪,真是天才。我会试试这个,让你知道会发生什么
    • 我刚刚添加了一个更新,提醒您在实际创建这些迁移时添加索引。
    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多