Rails检查是否可以删除具有外键约束的对象

时间:2013-12-17 18:23:14

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

系,课程,学生班。

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

部门和课程有依赖删除foreign_key约束。 删除部门后,必须删除其所有课程。但是,如果课程有学生分配,则该课程不能删除。这意味着,部门又无法删除。

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

2 个答案:

答案 0 :(得分:0)

处理这种情况最友好的方式可能是只显示删除键并添加一个before_destroy ActiveRecord Callback,它可以检查部门是否可以被销毁。

请记住,如果您真的只想显示可以删除的删除链接,我建议您将检查分为Course类和Department类中的方法,这是遵循最佳实践Law of Demeter

答案 1 :(得分:0)

我们通过一直显示destroy链接来解决它。点击链接时,将触发对删除的ajax调用。如果数据库具有外键约束,我们将捕获它并向用户显示它不能被删除。

因此任何数据库查询都无需检查约束......