2016-01-24 31 views
0

我的Classroom型號具有兩個屬性student_classcodeteacher_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_classcodestudent_classcode列中是唯一的。例如,如果Classroom A的student_classcode'12345'和(偶然)Classroom B的teacher_classcode生成爲'12345',我希望Classroom B重新生成類代碼。或者,如果Classroom B的student_classcode'abcde'和Broom的teacher_classcode'abcde',則我希望Classroom B重新生成teacher_classcode

我知道在兩列中存在兩個相同類代碼的機會很小,但我不想冒險。我怎樣才能做到這一點?

回答

0

爲什麼不讓Classcode成爲自己的模型,通過驗證來確保代碼是唯一的。然後生成一個通用代碼,並通過Classroom的標準belongs_to關聯可以將老師和學生類代碼關聯起來。

這樣你就可以確定每個classcode是唯一的,只有一個代碼生成的實現。

+0

好主意!沒想到這一點。謝謝。 – Olivia