2016-04-01 21 views
0

Tabloda bir sütun doldurmak için kullanıyorum bir before_create işlevi var. Örneğin before_create için: generate_numberRaylarda oluşturmadan önce özel doğrulama

def generate_number 

    end 

Ben bir koşula dayalı nüfuslu önce sütununun benzersizliğini kontrol etmek istiyorum.

örnek: sayı veritabanı 2 yıl süren oluşturulur eğer önce ben benzersizliği doğrulama bunun i için özel bir doğrulama yazabilirim nasıl

uygulanacak istemiyorum. Ve nereye eklemeliyim?

Bir doğrulama mantığı uygulamak unless veya if kullanabilirsiniz

cevap

0

: Bir belirtilen yana

validate_uniqueness_of :column_name, unless: -> { created_at < 2.years.ago } 

Bu before_create

class User < ActiveRecord::Base 
    #... 

    validate_uniqueness_of :column_name, unless: -> { created_at < 2.years.ago } 
end 
+0

Bu durumda, doğrulama doğrulanmıyorsa adı boş bırakır mı? –

0

aynı şekilde sizin ActiveRecord modelinde gider Veritabanında olmayan bir tane oluşturuluncaya kadar sayı üretmeye devam etmesini istediğinize yorum yapın:

def generate_number 
    begin 
    value = generate 
    end while created_at < 2.years.ago && Table.exists?(column: value) 
    self.column = value 
end 

def generate 
    ... # Code to generate number here 
end 

Bu, while döngüsünü sürdürmeye devam eder, oluşturulan_at sütunu 2 yıldan daha kısa bir süre önce oluşturulur ve oluşturulan sayı veritabanındadır. while koşulunu tabana koydum böylece generate kontrol edilmeden önce en az bir kez çalışacaktır.

Ben hala created_at koşulunun amacını anlamıyorum, nasıl çalışması gerektiğini belirtmek isterseniz, o bölümü değiştirebilirim. Aksi halde, sadece bir örnek olarak düşüneceğim ve asıl sorunun bir parçası değil.

+0

evet onaylama, –

+0

tam olarak tatmin olmazsa, farklı bir sayı üretilir ve böylece rastgele bir işlevi yeniden oluşturmak ve rasgele işlevini çağırmak istemiyorum, ben bir sayıyı oluşturacak şekilde oluşturmaya devam etmek için oluşturmaya devam etmek için bir döngü içerecek şekilde güncelleştirdim zaten veritabanında değil. – MTarantini

İlgili konular