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" 

미리 도움을 청하십시오!

+0

. Rails는 탁구 클럽에서 club_id를 찾고 있습니다. 테이블 클럽은 그렇게하지 않을 것입니다, 그것은 단지 ID를 가질 것입니다. –

+0

@DavidWeber 입력 해 주셔서 감사합니다! 클럽 키가없는 클럽 테이블에서 외부 키인 club_id (주최자 테이블에 있음)가 클럽 테이블의 주요 기본 키가 아니라는 오류가 발생했습니다. 외래 키를 옵션으로 설정 했으므로이 오류가 발생하지 않을 것이라고 생각합니다. 이견있는 사람? –

+0

Organizer 레코드는 어떻게 작성합니까? – maicher

답변

1

코드가 0 값을 club_id으로 설정하려고합니다.

나는이 속성 nil 강제 제안하고 오류가 계속 발생하는지 관찰 할 것입니다 : 당신의 오류는 아마 다른 곳에서오고있다

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