Ve sütunlu bir Releasemodelim var (diğerleri arasında). Aynı / kombinasyonları paylaşan olmamalı .mediumcountryreleasesmediumcountry
Bunu bir ray doğrulaması olarak nasıl yazabilirim?
Ve sütunlu bir Releasemodelim var (diğerleri arasında). Aynı / kombinasyonları paylaşan olmamalı .mediumcountryreleasesmediumcountry
Bunu bir ray doğrulaması olarak nasıl yazabilirim?
Yanıtlar:
Bu seçenekle bir benzersizlik doğrulaması kullanabilirsiniz scope.
Ayrıca, yeni kayıtların yazılmadan önce aynı anda kontrol edildiğinde doğrulamaları geçmesini önlemek için DB'ye benzersiz bir dizin eklemelisiniz:
class AddUniqueIndexToReleases < ActiveRecord::Migration
def change
add_index :releases, [:country, :medium], unique: true
end
end
class Release < ActiveRecord::Base
validates :country, uniqueness: { scope: :medium }
end
uniquetanınmadığı için -1 . Bu kısım için aşağıdaki cevabı kullandım.
uniqueness, olmamalı unique. Bağlantılı belgelere bakın. Cevabı düzeltiyorum.
Yukarıdaki yanıtların tümü, bir modeldeki birden çok özelliğin benzersizliğinin nasıl doğrulanacağı konusunda eksiktir. Aşağıdaki kod, bir kapsamda birden çok özniteliğin nasıl kullanılacağını anlatmayı amaçlamaktadır.
validates :country, uniqueness: { scope: [:medium, :another_medium] }
Bu benzersizliği doğrular countrydeğerleri ile tüm satırlara mediumve another_medium.
Not: Yukarıdaki sütuna bir dizin eklemeyi unutmayın, bu hızlı erişimi garanti eder ve benzersiz kayıtlar için bir DB düzeyi doğrulaması ekler.
Güncelleme: Tablo oluştururken bir dizin eklemek için
t.index [:medium, :another_medium], unique: true
:scopeDoğrulayıcınıza aşağıdaki gibi bir parametre iletebilirsiniz :
validates_uniqueness_of :medium, scope: :country
Daha fazla örnek için belgelere bakın .