当我第一次投票时,这次我试图尽可能清楚地了解我的目标。如果他们不清楚,请让我知道缺少什么。
我有课程和学生,他们有很多关系。当我为newCourseParticipation创建记录时,我想检查课程是否已经满(通过完整的方法)。
最好的方法是什么?我的第一个冲动是在控制器的Create动作中引入条件检查,现在我在Course模型中进行验证。但我认为最好是在CourseParticipation模型中进行“before_create”验证。不知道如何做到这一点。
我的课程模式
class Course < ActiveRecord::Base
has_many :students, through: course_participations
has_many :course_participations
end
我的学生模特
class Student < ActiveRecord::Base
has_many :courses, through: course_participations
end
联接模式
class CourseParticipation < ActiveRecord::Base
belongs_to :student
belongs_to :course
end
在UsersController中:
def create
@course = Course.find(params[:course_id])
@student = Student.find_or_create_by(user_params)
if @student
@course.participate(@student)
end
end
在课程模型中:
def full?
self.students.count >= self.max_students
end
def participate(student)
if !self.full?
course_booking = CourseParticipation.new(course_id: self.id, student_id: student.id)
course_booking.save
else
self.errors.add(:course_full, "course is full")
end
end
目标:
答案 0 :(得分:2)
试试这个:
class CourseParticipation < ActiveRecord::Base
belongs_to :student
belongs_to :course
before_create :check_class_size
private
def check_class_size
!self.course.full?
end
end