2016-08-08 54 views
0

我有兩種模式。一個Events模型和一個EventOptionEventshave_many:event_optionsRails5 - 在現有模型中添加外鍵到postgres

我的問題是,當我嘗試做遷移到add_foreign key :event_options, :events,這樣我可以聯繫他們,我得到以下錯誤:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "event_id" referenced in foreign key constraint does not exist 
: ALTER TABLE "event_options" ADD CONSTRAINT "fk_rails_3995702fad" 
FOREIGN KEY ("event_id") 
    REFERENCES "events" ("id") 

這裏是我的schema.rb:

ActiveRecord::Schema.define(version: 20160806001743) do 

    # These are extensions that must be enabled in order to support this database 
    enable_extension "plpgsql" 

    create_table "event_options", force: :cascade do |t| 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.float "price" 
    t.text  "description" 
    t.string "name" 
    end 

    create_table "events", force: :cascade do |t| 
    t.datetime "created_at",    null: false 
    t.datetime "updated_at",    null: false 
    t.string "name" 
    t.boolean "active",  default: true 
    end 

    create_table "users", force: :cascade do |t| 
    t.datetime "created_at",      null: false 
    t.datetime "updated_at",      null: false 
    t.string "email",       null: false 
    t.string "encrypted_password", limit: 128, null: false 
    t.string "confirmation_token", limit: 128 
    t.string "remember_token",  limit: 128, null: false 
    t.index ["email"], name: "index_users_on_email", using: :btree 
    t.index ["remember_token"], name: "index_users_on_remember_token", using: :btree 
    end 

end 

我知道有:id列工作,因爲我可以在控制檯中與他們一起玩。我知道我在這裏錯過了一些東西來讓外鍵爲應用程序工作,但在我的生活中,我不知道是什麼。

+0

它想'event_id'你需要在你的'event_options'表,否則'has_many'不會工作,要麼 –

回答

4

等待,你的意思是has_many的外鍵選項,這不是add_foreign_key令人困惑的東西。它添加了一個外鍵約束。

因此,在你遷移你需要做add_columnadd_reference第一

add_reference :event_options, :event, index: true 
add_foreign_key :event_options, :events 
+0

這並它!爲了確保我理解它是如何工作的(我認爲我在此之前做過了,但是誰知道這一點?),我可以將:events的id列添加到event_options的event_id中,而那些將被鏈接,對嗎? – GeekFitness

+0

@GeekFitness是的。 –