2016-11-07 45 views
0

我正在使用模型來跟蹤我的超市購買。表示項的表的模式是: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)是一個建模錯誤;我應該把它作爲一個外鍵,將文本描述放在一個附加表格中,因爲同一事物的不同品牌對於一些但不是全部分析目的是等同的。所以,我想用一個gendescs_id列,它是由此產生了一些gedescs表,該表將相當於東西外鍵更換gendesc柱:

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

select into gendescs(gendesc) distinct gendesc from items; 

有它確實是這樣的Rails遷移的順序?

回答

1

理想的流量應該是這樣的:

  1. 創建gendescs表。我不希望列名與表名相同。

    軌G型Gendesc值:字符串

  2. 添加外鍵

    軌摹遷移AddGendescToItem gendesc:引用

  3. 運行rake db:migrate

  4. 如果你有數據在items.gendesc列中,那麼你需要cr在gendescs表中爲他們提供條目。在rails控制檯中運行以下代碼。從項目表

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

  6. belongs_to的關係添加到項目模型

    belongs_to的:gendesc

相關問題