【问题标题】:Rails check if object with foreign key constraint can be deletedRails 检查是否可以删除具有外键约束的对象
【发布时间】:2013-12-17 18:23:14
【问题描述】:

部门、课程、学生班级。

class Department < ActiveRecord::Base
 has_many :courses
end

class Course < ActiveRecord::Base
 belongs_to :department
 has_many :students
end

class Student < ActiveRecord::Base
 belongs_to :course
end

部门和课程有依赖删除外键约束。 当一个部门被删除时,它的所有课程都必须被删除。但是,如果课程有分配给它的学生,则无法删除该课程。意思是,部门反过来不能被删除。

现在,我需要查找是否可以删除部门,以便在索引页面中显示删除链接。有没有一种方法可以在不查询所有课程的情况下找到它,以检查他们是否分配了学生?问题是,我必须显示数百个部门。而且为了显示每个删除链接,我需要查询很多。

【问题讨论】:

    标签: mysql sql ruby-on-rails foreign-key-relationship


    【解决方案1】:

    处理这种情况对性能最友好的方法可能是始终显示删除键并添加一个 before_destroy ActiveRecord 回调来检查部门是否可以被销毁。

    请记住,如果您真的只想为可以删除的链接显示删除链接,我建议您根据遵守的最佳实践将检查分为课程类和部门类的方法Law of Demeter

    【讨论】:

      【解决方案2】:

      我们通过一直显示销毁链接解决了这个问题。点击链接时,将触发删除的 ajax 调用。如果数据库有外键约束,我们会捕获它并向用户显示它不能被删除。

      所以任何数据库查询都不需要检查约束...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多