假设我有很多学校、很多学生和很多俱乐部。一个学生可以去一所或多所学校。一所学校可以有任意数量的俱乐部。
只要学生当前就读于俱乐部所属的学校,就可以将其添加到俱乐部。
我很想在 ClubStudent 加入课程中做这样的事情
class ClubStudent < ActiveRecord::Base
belongs_to: student
belongs_to: club
validate: student_school_matches_club_school
def student_school_matches_club_school
unless student.schools.member? club.school
self.errors.add(:student, "must be enrolled in club's school")
end
end
end
问题是基于事物如何创建或持久化的顺序,或者如果将学生添加到俱乐部或将俱乐部添加到学生,则可以使用 nil 学生或 nil 俱乐部运行验证。或者显然它可能无法通过验证,但仍会持续存在。
处理此类验证的最佳方法是什么?