2016-08-04 34 views
3

(Rails是5.0.0版,紅寶石2.3.0p0)導軌和add_foreign_key遷移:「列‘user_ID的’外鍵約束中引用不存在」

我要創造我的用戶表之間的關聯和卡表。我已經添加belongs_to :user到卡模式,has_many :cards到用戶模式,創造一個與遷移:

class AddUserIdToCard < ActiveRecord::Migration[5.0] 
    def change 
    add_foreign_key :cards, :users, column: :user_id 
    end 
end 

當我運行rake db:migrate,我收到錯誤:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "user_id" referenced in foreign key constraint does not exist 
: ALTER TABLE "cards" ADD CONSTRAINT "fk_rails_8ef7749967" 
FOREIGN KEY ("user_id") 
    REFERENCES "users" ("id") 

現在我最初只需在遷移中添加add_column :cards, :user_id, :integer即可解決此問題,但這看起來並不很整齊,而且我擔心之後會出現問題。有沒有更好的方法來完成這一點?

+0

請註明的答案,當你有一分鐘​​,因爲它是正確的 – rmcsharry

回答

3

您正在爲cards表設置user_id列的外鍵。但是你還沒有創建參考。創建一個引用,然後添加外鍵以保持參照完整性。回滾與

1 class AddUserIdToCard < ActiveRecord::Migration[5.0] 
2  def change 
3  add_reference :cards, :users, index:true 
4  add_foreign_key :cards, :users 
5  end 
6 end 

一行三會創建,在cards表,以idusers表的引用(在cards創建user_id列)修改您的遷移。

第4行將在數據庫級別將外鍵約束添加到user_id

欲瞭解更多,請閱讀Add a reference column migration in Rails 4

+0

好了...我得到了'add_references'一個沒有方法的錯誤,但我想'add_reference'(單數)而不是這個錯誤消失了。 但是,我還是得到了什麼樣子基本相同的錯誤: 'StandardError的:發生錯誤,這一點,並取消了所有後來遷移:' 'PG :: UndefinedColumn:錯誤:列「USER_ID」在國外引用鍵約束不存在 :ALTER TABLE「cards」ADD CONSTRAINT「fk_rails_8ef7749967」 FOREIGN KEY(「user_id」) REFERENCES「users」(「id」)' –

+0

對不起。方法名是'add_reference'而不是'add_references'。我會更新它。 –