我的Classroom
模型有两个属性,student_classcode
和teacher_classcode
。我有一个after_create
回调来在创建教室后生成这两个代码。目前,我只用这个生成student_classcode:
(摘自here)
class Classroom < ActiveRecord::Base
after_create :generate_token
private
MAX_RETRIES = 10
def generate_token
update_column :student_classcode, SecureRandom.hex(4)
rescue ActiveRecord::RecordNotUnique => e
@token_attempts = @token_attempts.to_i + 1
retry if @token_attempts < MAX_RETRIES
raise e, "Retries exhausted"
end
end
现在它确保student_classcode
是唯一的(最多10次重试)。我希望能够生成teacher_classcode
,并且我希望确保它在teacher_classcode
列和 student_classcode
列中是唯一的。
因此,例如,如果课堂A具有student_classcode
'12345',并且(偶然)课堂B的teacher_classcode
生成为'12345',我希望课堂B重新生成类代码。或者,如果课堂B有student_classcode
'abcde',而课堂B有teacher_classcode
'abcde',那么我希望课堂B重新生成teacher_classcode
。
我知道两个列中存在两个相同类代码的可能性很小,但我不想冒险。我怎样才能做到这一点?
答案 0 :(得分:0)
为什么不将Classcode
本身设为模型,并使用验证来确保代码是唯一的。然后生成通用代码,并通过belongs_to
中的标准Classroom
关联,您可以将教师与学生的类代码相关联。
通过这种方式,您可以确保每个类代码都是唯一的,并且只有一个代码生成实现。