2012-01-25 16 views
1

私のRoRデータの保存方法に関するいくつかの提案を探しています。本質的に、私は追跡する必要がある20以上のアイテム(50を超えることはありません)を持っています。各項目は、毎日(午前、午後、夕方のいずれか)に異なるX、Y座標を持ち、7つの平日のそれぞれに異なるスケジュール(本質的に、各時刻の21の異なるx、y点/曜日の組み合わせ)。また、名前、カテゴリ、その他の静的な値もあります。RoRの直列化 - 構造体、ハッシュ、?

今、私は21個の異なるx、y点をどのように保存したいのかを決めようとしています。 (a)wednesday_afternoon_x、wednesday_afternoon_yなどの各フィールドを格納するか、または(b)x.wednesday.afternoonなどのハッシュ/構造体としてシリアライズして格納するかのどちらかで、スペクトルに2つの反対の極端なものがあるとします。 3番目のオプションは、別のテーブルに分割することです(つまり:tuesday_item、:wednesday_itemモデルなど)

私ができる必要があることの1つは、これらのフィールドによる検索/フィルタリングですたとえば、特定のTimeOfDayとDayOfWeekの特定のカテゴリ内にあるアイテムを取得したい場合です。

私はどのように進めるべきかに関する推奨事項はありますか?ありがとう!

答えて

1

私はアイテム用とデータベース用の2つのデータベーステーブルを使用します。スキーマは、単純な次のようになります。

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 

[UPDATE:あなたが実際にこれらの移行を作成すると、インデックスを追加するのを忘れないでください! 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] 
+0

聖なる牛、それは天才です。私はこれを試して、何が起こるかを教えてくれるでしょう – Josiah

+0

実際にそれらの移行を作成するときにインデックスを追加するように通知する更新を追加したばかりです。 –

+0

これは本当に素晴らしい、ありがとう! – Josiah