gpt4 book ai didi

ruby-on-rails - Rails 中删除时的外键设置为 NULL

转载 作者:行者123 更新时间:2023-11-29 12:02:10 29 4
gpt4 key购买 nike

我正在使用 Rails 中的两个模型

    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 不首先反射(reflect)模型?

为什么表格不反射(reflect)我手动对 schema.rb 所做的更改?

如何删除学生而不删除所有类(class)?

最佳答案

为什么 schema.rb 不首先反射(reflect)模型?

因为rails db:migrate:reset使用db/migrate中的文件来生成数据库,而不是app/models文件

找出正确的“railsgenerate”命令来创建正确的

db/migrate/timestamp_do_this_or_that.rb

文件或选择现有的(稍后)db/migrate/timestamp_do_this_or_that.rb 文件并在“defchange”和“end”之间添加此行:

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

rails 数据库:迁移:重置

rails 数据库:种子

任何学生都可以被删除,即使他/她有类(class),并且他们的 id 曾经在类(class)表中的位置现在为“nil”

为什么表格不反射(reflect)我手动对 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

关于ruby-on-rails - Rails 中删除时的外键设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52172386/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com