Один из способов, о котором я думаю, - это проверки:
class Course < ActiveRecord::Base
has_many :course_prerequisites
belongs_to :user
validate :course_prerequisites
private
def course_prerequisites
unless user.completed_all_prerequisites(course_prerequisites)
errors.add_to_base("Must complete all prerequisites")
end
end
end
Нечто подобное. Обратите внимание, что добавление ошибки программно не может сделать вашу модель недействительной. Если это произойдет с вами (попробуйте), либо создайте исключение, либо посмотрите, подходит ли модель перед сохранением.