Tag: 乐观锁定

如何在Rails应用程序中避免竞争条件?

我有一个非常简单的Rails应用程序,允许用户在一组课程中注册他们的出勤。 ActiveRecord模型如下: class Course < ActiveRecord::Base has_many :scheduled_runs … end class ScheduledRun :attendances … end class Attendance true … end class User :attendances, :source => :scheduled_run end ScheduledRun实例具有有限数量的可用位置,一旦达到限制,就不能再接受更多的考勤。 def full? attendances_count == capacity end attendances_count是一个计数器缓存列,包含为特定ScheduledRun记录创建的出勤关联数。 我的问题是,当一个或多个人同时尝试在课程中注册最后一个可用位置时,我不完全知道确保不会发生竞争条件的正确方法。 我的考勤控制器如下所示: class AttendancesController :create def new @user = User.new end def create unless @user.valid? render :action => ‘new’ end […]