ИНОСТРАННЫЙ КЛЮЧ НА УДАЛЕННОМ УСТАНОВЛЕНЕ НУЛЕМ в рельсах - PullRequest
0 голосов
/ 04 сентября 2018

Я работаю с двумя моделями в рельсах

    class Student < ApplicationRecord
      belongs_to :school
      has_many :lessons
    end

и

    class Lesson < ApplicationRecord
      belongs_to :student, optional: true
    end

Я действительно надеялся, что это приведет к тому, что Oracle сделает с FOREIGN KEY ON DELETE SET NULL

после того, как я делаю rails db: migrate: reset Я получаю сгенерированный db / schema.rb со строкой

      add_foreign_key "lessons", "students"

Чего я не ожидал, учитывая мои модели, так что Я изменил его вручную до

   add_foreign_key "lessons", "students", on_delete: :nullify

Независимо от того, что я делаю, я получаю нарушение внешнего ключа каждый раз, когда пытаюсь удалить студента, у которого есть уроки.

Почему schema.rb не отражает модели в первую очередь?

Почему таблицы не отражают изменения, которые я внес в schema.rb вручную?

Как удалить студента, не удаляя все уроки?

1 Ответ

0 голосов
/ 05 сентября 2018

Почему schema.rb не отражает модели в первую очередь?

потому что rails db: migrate: reset использует файлы в db / migrate для генерации базы данных, а не файлы app / models

либо определите правильную команду 'rails generate', чтобы создать правильную

db / migrate / timestamp_do_this_or_that.rb

файл или выберите существующий (более поздний) файл db / migrate / timestamp_do_this_or_that.rb и добавьте эту строку между 'def change' и 'end':

add_foreign_key "lessons", "students", on_delete: :nullify

rails db: migrate: сброс

rails db: seed

и любой ученик может быть удален, даже если у него / нее есть уроки, а их идентификатор в таблице урока теперь равен 'nil'

Почему таблицы не отражают изменения, которые я сделал в schema.rb вручную?

Не могу сказать точно, но, возможно, автоматически созданный файл schema.rb просто для справки. В комментариях вверху файла говорится:

    # Instead
    # of editing this file, please use the migrations feature of Active Record to
    # incrementally modify your database, and then regenerate this schema definition
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...