2016-04-07 18 views
0

Model düzeyinde teklik kısıtlaması var ve MySQL düzeyine aynı şekilde taşınmam gerekiyor. Aynı şeyi yapmak için SQL deyimi nedir.Koşullu Teklik Kısıtlaması Ruby on raylar

class Blog < ActiveRecord::Base 
    validate :uniqness_of_title 

    def uniqness_of_title 
     blog = Blog.where("title=? and lock_version<>-1", self.title).last 
     self.errors.add :base, "Title already exists." if blog 
    end 
end 

ve O başlık zaten rekor lock_version sahip var olsa dahi 'bloglar' tabloya giriş yapmak için izin vermelidir = -1.

cevap

0
ALTER TABLE blogs ADD CONSTRAINT uc_title UNIQUE (title) 
+0

Lock_version sütununu da doğrulamam gerekiyor. Blog başlığı lock_version = -1 ile mevcut olsaydı. Giriş yapabilmeli. –

+1

Bunu mysql kısıtlamaları ile yapabileceğinizi sanmıyorum (http://stackoverflow.com/questions/987099/unique-constraint-with-conditions-in-mysql adresinde bulunan görüşler). Şahsen, modelde bu gibi iş mantığı koşullarını bırakırdım. – born4new

+0

@ born4new Benzersizlik sadece * veritabanı tarafından garanti edilebilir. 3 Rails uygulama sunucunuz varsa, aynı anda 3 model düzeyinde kontrol gerçekleştirebilir, bunların hiçbiri bu başlık ile mevcut bulunamaz ve hepsinin yeni bir tane oluşturabilir. Bunu MySQL ile en iyi şekilde yapmak başka bir soru. –