Я предполагаю, что ваша модель зачисления определяет как принятых, так и тех, кто находится в списке ожидания.Я также предполагаю, что модель лекции имеет два атрибута available_seats
и available_wait_space
, и список ожидания заполняется в порядке поступления, и студенты отклоняются, если список заполнен, но фактические места подтверждены или отклоненылектором вручную.
Я бы, конечно, не советовал ничего делать на уровне контроллера.Это задание только для моделей.
class Enrollment < ActiveRecord::Base
belongs_to :student
belongs_to :lecture
validates_presence_of :student_id, :lecture_id, :status
validates_inclusion_of :status, :in => %w[waiting confirmed rejected]
validate :must_fit_in_wait_list, :on => :create
validate :must_fit_in_class, :on => :update
scope :waiting, where(:status => 'waiting')
scope :confirmed, where(:status => 'confirmed')
scope :rejected, where(:status => 'rejected')
def must_fit_in_wait_list
unless waiting.count < lecture.available_wait_space
errors.add(:base, "The waiting list is full")
end
end
def must_fit_in_class
unless confirmed.count < lecture.available_seats
errors.add(:status, "The seats are full")
end
end
end
Кстати, не забудьте установить значение по умолчанию для status
на "ожидание" в ваших миграциях.