2016-11-07 6 views
0

私はdupermarketの購入を追跡するためにモデルを使用しています。アイテムを表すテーブルのスキーマは次のとおりRails:列自体をテーブルとしてスプールできますか?

CREATE TABLE "items" 
("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "barcode" varchar, 
    "brand" varchar, 
    "gendesc" varchar, 
    "size" float, 
    "unit_id" integer, 
    "created_at" datetime NOT NULL, 
    "updated_at" datetime NOT NULL); 

gendescの包含(一般的な説明、varcharとして)モデリング間違いでした。私はこれを外部キーにして、別のテーブルにテキストの説明を書いておきます。同じブランドの異なるブランドは、すべての分析目的ではないが同等であるためです。だから私は、このように作成されたものに相当しますいくつかのgedescsテーブルの外部キーであるgendescs_id列にgendesc列を置換する:

create table gendescs (id integer primary key, gendesc varchar); 

select into gendescs(gendesc) distinct gendesc from items; 

はこのような何かを行うRailsのマイグレーションの順序はありますか?

答えて

1

理想の流れは次のようにする必要があります:

  1. gendescsテーブルを作成します。私はテーブル名と同じ名前の列にしないことを好むでしょう。

    はグラムモデルGendesc値をレール:文字列

  2. 外部キーを追加グラム移行AddGendescToItemのgendescレール:参照

  3. 実行rake db:migrate

  4. あなたはデータを持っている場合items.gendescコラムであなたはcrにする必要がありますそれらのエントリをgendescsテーブルに格納します。 railsコンソールで次のコードを実行します。 :gendesc

:アイテムテーブルから

Item.find_each do |i| 
    g = Gendesc.find_or_create_by(value: i.gendesc) 
    i.update(gendesc_id: g.id) 
end 
  • 削除列gendescは How to remove a column from my Rails model?

  • 項目モデル

    belongs_toのに関係BELONGS_TO追加します

  • 関連する問題