2017-01-01 16 views
0

我爲表orders創建新遷移,併爲表用戶指定外鍵user_idOrder:User=N:1之間的關係。遷移文件是:add_foreign_key不會生成新列

class CreateOrders < ActiveRecord::Migration 
    def change 
    create_table :orders do |t| 
     t.datetime :begin 
     t.integer :plan 
     t.boolean :activiated 
     t.timestamps null: false 
    end 
    add_foreign_key :orders, :users 
    end 
end 

做過耙分貝後:移民,我的日誌中軌控制檯:

2.1.10 :010 > Order.column_names 
=> ["id", "begin", "plan", "activiated", "created_at", "updated_at"] 
2.1.10 :011 > User.column_names 
=> ["id", "name", "email", "created_at", "updated_at", "password_digest", ...] 

,但我沒有找到user_id列。我跟着3.6 Foreign Keys,說外線鑰匙應該在那裏。有什麼我失蹤?謝謝。

回答

1

像它說,在導遊

add_foreign_key :articles, :authors 

這增加了一個新的外鍵物品的AUTHOR_ID列 表

它增加了對列外鍵約束,並且該列必須已經在表格中。因此,您必須在遷移之前將其包含在內。

create_table :orders do |t| 
    t.datetime :begin 
    t.integer :user_id 
    t.integer :plan 
    t.boolean :activiated 
    t.timestamps null: false 
end 
add_foreign_key :orders, :users 
+0

我對英語的理解很差..所以,如果我在遷移文件中添加user_id列並進行遷移,我應該進行修改(例如,重新生成模型)嗎? –

+0

不完全確定你的意思,但是你可以用'rake db:rollback'回滾遷移,然後再用'rake db:migrate'運行。 – Iceman

0

你只需要運行rake db:rollback,然後在早期遷移文件添加t.integer :user_id並保存文件。

然後運行rake db:migrate。希望這將有助於解決您在特定情況下的問題。