Можем ли мы иметь несколько внешних ключей в схеме активной записи? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть схема с таблицей персон, таблицей электронной почты, таблицей телефонов и таблицей адресов.

Модель человека

class Person< ApplicationRecord
  has_many :emails, dependent: :destroy
  accepts_nested_attributes_for :emails
  default_scope { order(created_at: :desc) }
end

Модель электронной почты

class Email< ApplicationRecord
  belongs_to :Person
  has_one :phone, dependent: :destroy
  has_many :address, dependent: :destroy
  accepts_nested_attributes_for :phone
  accepts_nested_attributes_for :address
end

Модель телефона

class Phone< ApplicationRecord
  belongs_to :Email
end

Модель адреса

class Address < ApplicationRecord
      belongs_to :Email
   end

Моя схема выглядит так

ActiveRecord::Schema.define(version: 2019_06_03_231058) do

  create_table "emails", id: :string, limit: 36, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", force: :cascade do |t|
    t.boolean "deleted", default: false, null: false
    t.datetime "created_at", precision: 3, null: false
    t.datetime "updated_at", precision: 3, null: false
    t.string "Person_id", limit: 36
    t.index ["Person_id", "created_at"], name: "index_email_on_Person_id_and_created_at"
  end

  create_table "phones", id: :string, limit: 36, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", force: :cascade do |t|
    t.string "phone_id", limit: 36, null: false
    t.boolean "deleted", default: false, null: false
    t.datetime "created_at", precision: 3, null: false
    t.datetime "updated_at", precision: 3, null: false
    t.string "email_id", limit: 36
    t.string "person_id", limit: 36
    t.index ["email_id", "created_at"], name: "index_phone_on_email_id_and_created_at"
    t.index ["person_id"], name: "fk_rails_7119a1d90f"
  end

  create_table "persons", id: :string, limit: 36, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", force: :cascade do |t|
    t.boolean "deleted", default: false, null: false
    t.datetime "created_at", precision: 3, null: false
    t.datetime "updated_at", precision: 3, null: false
    t.index ["created_at"], name: "index_persons_on_created_at"
  end

  create_table "address", id: :string, limit: 36, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", force: :cascade do |t|
    t.string "address_id", limit: 36, null: false
    t.boolean "deleted", default: false, null: false
    t.datetime "created_at", precision: 3, null: false
    t.datetime "updated_at", precision: 3, null: false
    t.string "email_id", limit: 36
    t.string "person_id", limit: 36
    t.index ["email_id", "created_at"], name: "index_address_on_email_id_and_created_at"
    t.index ["person_id"], name: "fk_rails_485c78b376"
  end

  add_foreign_key "emails", "persons"
  add_foreign_key "phones", "emails"
  add_foreign_key "phones", "persons"
  add_foreign_key "address", "emails"
  add_foreign_key "address", "persons"
end

Так что, если вы заметите в моей схеме в самом конце, у меня есть 2 внешних ключа для телефонов и адреса.

когда я вставляю данные, email_id помещается в таблицу person, но не person_id. Я вижу ту же проблему в таблице адресов, где размещен email_id, но не person_id

Я новичок в рельсах Концепция активной записи, когда с помощью онлайн-документации не удалось решить эту проблему, любая помощь очень ценится.

...