2016-08-08 50 views
0

Ich habe zwei Modelle. Ein Events Modell und ein EventOption. Die Events wird have_many:event_options.Rails5 - Hinzufügen von Fremdschlüssel zu vorhandenen Modellen in Postgres

Mein Problem ist, dass, wenn ich versuche, eine Migration zu add_foreign key :event_options, :events zu tun, damit ich sie verbinden kann, bekomme ich folgende Fehlermeldung:

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") 

Hier ist mein 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 

Ich weiß, es gibt: ID-Spalten, die funktionieren, weil ich mit ihnen in der Konsole spielen kann. Ich weiß, dass mir hier etwas fehlt, damit die Foreign Keys für die App arbeiten, aber für das Leben von mir weiß ich nicht was.

+0

Es tun will 'event_id' Sie, dass auf Ihrem' event_options' Tabelle müssen, da sonst die 'HAS_MANY'- wird auch nicht –

Antwort

4

Warte, du meinst die Fremdschlüsseloption für die has_many, die add_foreign_key nicht verwirrend macht. Es fügt eine Fremdschlüsseleinschränkung hinzu.

So in der Migration müssen Sie add_column oder add_reference erste

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

Arbeit, die getan es! Und um sicherzugehen, dass ich verstehe, wie es funktioniert (ich dachte, ich hätte das vorher getan, aber wer weiß an dieser Stelle?), Kann ich hinzufügen, was auch immer in der: id-Spalte von: events in die: event_id von: event_options steht wird verlinkt, oder? – GeekFitness

+0

@GeekFitness yep. –