Rails (3.2.0) üzerinde Ruby (1.9.3) çalıştırıyorum ve sanal özniteliklerin doğrulanmasıyla ilgili bir sorun yaşıyorum.Ruby on Rails'deki sanal özniteliklerin doğrulanması
Diğerlerinin yanı sıra, kalkış ve varış havalimanını temsil eden özelliklere sahip bir uçuşu temsil eden bir Flight
modelim var.
Bir havalimanı seçmek için select
potansiyel olarak çok büyük olduğundan, mükemmel bir şekilde çalışmakta olan otomatik tamamlama çözümüne gitmeyi tercih ettim.
before_validation do
self.departure_airport = Airport.find_by_long_name(departure_airport_name)
self.arrival_airport = Airport.find_by_long_name(arrival_airport_name)
end
Sorun, ancak kullanıcı veritabanında mevcut olmayan bir havaalanının adını girdiğinde, taahhüt olduğunu başarısız: Ben düzgün havaalanının gerçek kimliğini doldurmak için bir before_validation
geri arama kullanıyorum Her iki havalimanının kimliği nil
'dur. Harika. Ne var değil harika, ancak, teknik olarak, başka bir alan için giriş çünkü bu doğrulama hatası formda yansıyan olmamasıdır:
validates :departure_airport, :arrival_airport presence: true
attr_accessor :departure_airport_name, :arrival_airport_name
<%= f.input :departure_airport_name %>
<%= f.input :arrival_airport_name %>
düzgün yaklaşık gitmek için bu bile böyle mi havaalanının adını dönüştürülmesi, before_validation
geri aramada bir kimliğe mi? Ve eğer öyleyse, doğrulama hatalarını havalimanının sanal ad niteliğinde görünmesini nasıl sağlayabilirim?
Teşekkür nesneleri hatalara bir hata eklemek gerekir ve hata görüntülenmesi gereken! "Departure_airport" ve "arrival_airport" adreslerinde zaten doğrulamalarım var. Sorun şu ki, bunlar formdaki 'girdinin' temsil ettiği alanlar değil. Varlığı doğrulayamıyorum çünkü birileri bunlara metin yazdığında, alan mevcut, ancak gerçek "Havalimanı" nesnesi eksik olacak. – Laurens
Bu yüzden 'before_validation' geri aramayı kaydettirirsiniz. Kullanıcı anlamsızca girdiğinde, havaalanını bulamaz ve doğrulama başarısız olur. Bir hata eklenir ve kullanıcıya gösterilecektir. Belki özel bir hata masajı eklemeyi düşünmelisin. – klump
Üzgünüm, benim hatam. Anlamadım. Belki de kendi doğrulama metoduna ihtiyacın var. Nesneye 'self.errors.add (: fieldname," message ")' ile hata ekleyebilirsiniz. Şimdi 'departure_airport_name' alanını alan adı olarak kullanıyor ve bir mesaj ekliyorsanız, 'departure_airport_name' alanında görüntülenecektir. – klump