2016-09-08 5 views
1

私は、任意の量の属性を持つことができるプロダクトを持っていて、その属性は特定のオプションに限定されています。製品は、(それぞれ、以下の有効なオプション)を持つことができます。 アクティブレコードの参照データを表現する最良の方法

  • レッド

    • ブルー
    • グリーン
  • カテゴリー
    • スポーツを
    • フォーマル
    • キッズ
  • 防水
    • はい

リストは上に行くことができます。 1つのテーブルでこれをアクティブレコードで表現する方法はありますか?

create_table :attritubes do |t| 
    t.string :name # Red, Blue, Green, Sports, Formal... 
    t.string :field_type # Color, Category, Waterproof... 
end 

それは本当に多くをしないので、すべての属性のためのモデルを持っている廃棄物のように見えるでしょう:私はのようになります、単一の参照データテーブルを持っていることが理想的であると思います。これは、商品に多くの属性が含まれているという一般的なモデルがあるケースですか?または列(この構文を構成する)で属性を区別するためにアクティブなレコードのための方法があります:それを入力した後

belongs_to :color, class_name: :attribute, where(field_type: 'color') 

が、それはほとんどのスコープのように見えます...より良い方法が行きということです?

+0

使用列挙 – Ilya

+0

どのようにポリモーフィックな関連を使用した程度のような列挙型でデータを取る

create_table :attritubes do |t| t.string :color t.string :category t.boolean :waterproof end 

&などの属性のための単一のテーブルを作成することができますか?正確なモデル関係に指を置くことはできませんが、 '_タイプ'フィールドはユースケースの強いインジケーターのようです。 – mlabarca

答えて

0

その後、

enum color: { red:0, blue:1, green:2 } 
enum category: { sports:0, formals:1, kids:2 } 
enum waterproof: { no:0, yes:1 } 
関連する問題