Ve sütunlu bir Release
modelim var (diğerleri arasında). Aynı / kombinasyonları paylaşan olmamalı .medium
country
releases
medium
country
Bunu bir ray doğrulaması olarak nasıl yazabilirim?
Ve sütunlu bir Release
modelim var (diğerleri arasında). Aynı / kombinasyonları paylaşan olmamalı .medium
country
releases
medium
country
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
unique
tanı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 country
değerleri ile tüm satırlara medium
ve 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
:scope
Doğ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 .