У меня есть действительно простое приложение на Rails 3, где пользователи могут зарезервировать один из конечного числа однородных элементов на определенный день.Я пытаюсь избежать состояния гонки, когда два человека оставляют за собой последний предмет, доступный в определенный день.Модель (упрощенная) выглядит следующим образом:
class Reservation < ActiveRecord::Base
belongs_to :user
attr_accessible :date
MAX_THINGS_AVAILABLE = 20
validate :check_things_available
def check_things_available
unless things_available? errors[:base] << "No things available"
end
def things_available?
Reservation.find_all_by_date(date).count < MAX_THINGS_AVAILABLE
end
end
Резервирование создается в контроллере с помощью current_user.reservations.build(params[:reservation])
Такое ощущение, что есть лучший способ сделать это, но яне могу понять, что это такое.Буду очень признателен за любую помощь в предотвращении гонки.