私は多くの学校、多くの学生、そして多くのクラブを持っているとしましょう。学生は 1 つまたは複数の学校に通うことができます。学校にはいくつでもクラブを設けることができます。
クラブが所属する学校に現在在籍している限り、学生はクラブに追加することができます。
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 クラブで実行される可能性があります。または、明らかに検証に失敗する可能性がありますが、それでも永続化されます。
このタイプの検証に対処する最善の方法は何ですか?