0

Ich bin neu bei Rails (unter Verwendung von 5.1) und habe Probleme beim Einrichten meiner ActiveRecord-Verknüpfungen.Rails ActiveRecord-Beziehung Ungültiger Fremdschlüsselfehler

Organisatoren können sich anmelden und dann einen Club erstellen. Ein Organisator gehört zu einem Club (ich denke, könnte möglicherweise mehrere haben, aber im Moment ist es in Ordnung, nur einen zu erwarten). Clubs können viele Veranstalter haben.

Clubs werden immer erstellt, nachdem der Organizer erstellt wurde, so dass der Fremdschlüssel in Clubs zunächst Null ist.

Hier ist der Fehler, den ich bekommen habe, wenn alle Clubs einen Veranstalter zu schaffen versuchen, bereits erstellt, ohne dass:

ActiveRecord::InvalidForeignKey:   ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: insert or update on table "organizers" violates foreign key constraint "fk_rails_bc04936880" 
     DETAIL: Key (club_id)=(0) is not present in table "club". 

Veranstalter:

class Organizer < ApplicationRecord 
    belongs_to :club, optional: true 
    #also put config.active_record.belongs_to_required_by_default = false in application.rb 
end 

Club:

class Club < ApplicationRecord 
    has_many: organizers 
end 

Schema :

create_table "clubs", force: :cascade do |t| 
    t.string "full_name" 
    t.string "urn" 
    t.string "short_name" 
    t.string "address1" 
    t.string "address2" 
    t.string "city" 
    t.string "state" 
    t.string "zip" 
    t.string "website" 
    t.string "phone" 
    end 

    create_table "organizers", force: :cascade do |t| 
    t.string "first_name" 
    t.string "last_name" 
    t.string "email" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.string "password_digest" 
    t.string "remember_digest" 
    t.boolean "superuser", default: false 
    t.string "activation_digest" 
    t.boolean "activated", default: false 
    t.datetime "activated_at" 
    t.string "reset_digest" 
    t.datetime "reset_sent_at" 
    t.bigint "club_id" 
    t.index ["club_id"], name: "index_organizers_on_club_id" 
    t.index ["email"], name: "index_organizers_on_email", unique: true 
    end 

    add_foreign_key "organizers", "clubs" 

Vielen Dank im Voraus für die Hilfe!

+0

Ihr Fehler wahrscheinlich von anderswo kommt. Rails sucht club_id am Tischclub. Table Club wird das nicht haben, es wird nur ID haben. –

+0

Danke für den Eingang @DavidWeber! Es sieht so aus, als ob der Fehler besagt, dass der Fremdschlüssel club_id (auf dem Tisch des Organisators) kein gültiger Primärschlüssel auf dem Tisch des Klubs ist (da es momentan keine Vereine gibt). Obwohl ich diesen Fremdschlüssel als optional festlegen konnte, würde ich denken, dass ich diesen Fehler nicht bekommen würde. Irgendwelche Gedanken? –

+0

Können Sie uns zeigen, wie Sie den Organizer-Datensatz erstellen? – maicher

Antwort

1

Aus irgendeinem Grund versucht Ihr Code 0 Wert auf club_id zu setzen.

Ich würde vorschlagen, nil in diesem Attribut zu zwingen und beobachten, wenn der Fehler immer noch auftritt:

Organizer.create!(
    #... 
    club_id = nil 
) 
Verwandte Themen