1

私は多くの学校、多くの学生、そして多くのクラブを持っているとしましょう。学生は 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 クラブで実行される可能性があります。または、明らかに検証に失敗する可能性がありますが、それでも永続化されます。

このタイプの検証に対処する最善の方法は何ですか?

4

1 に答える 1