0
레일스 (5.1 사용)을 처음 사용하고 ActiveRecord 연관을 설정하는 데 문제가 있습니다.레일스 ActiveRecord 관계 잘못된 외래 키 오류
주최자가 가입 한 다음 클럽을 만들 수 있습니다. 주최자는 한 클럽에 속해 있습니다 (잠재적으로 여러 개를 가질 수 있지만 지금은 하나만 예상 할 수 있음). 클럽에는 많은 조직자가있을 수 있습니다.
클럽은 항상 Organiser가 생성 된 후에 생성되어 클럽의 외래 키가 처음에는 0이됩니다.
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".
주최 : :
class Organizer < ApplicationRecord
belongs_to :club, optional: true
#also put config.active_record.belongs_to_required_by_default = false in application.rb
end
클럽 :
class Club < ApplicationRecord
has_many: organizers
end
스키마 여기
는 주최자를 만들려고 할 때 이미 생성 된 클럽을하지 않고지고있어 오류 발생 :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"
미리 도움을 청하십시오!
. Rails는 탁구 클럽에서 club_id를 찾고 있습니다. 테이블 클럽은 그렇게하지 않을 것입니다, 그것은 단지 ID를 가질 것입니다. –
@DavidWeber 입력 해 주셔서 감사합니다! 클럽 키가없는 클럽 테이블에서 외부 키인 club_id (주최자 테이블에 있음)가 클럽 테이블의 주요 기본 키가 아니라는 오류가 발생했습니다. 외래 키를 옵션으로 설정 했으므로이 오류가 발생하지 않을 것이라고 생각합니다. 이견있는 사람? –
Organizer 레코드는 어떻게 작성합니까? – maicher