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!
Ihr Fehler wahrscheinlich von anderswo kommt. Rails sucht club_id am Tischclub. Table Club wird das nicht haben, es wird nur ID haben. –
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? –
Können Sie uns zeigen, wie Sie den Organizer-Datensatz erstellen? – maicher