örneğinin olarak kayıt değil, ben gibi bir kod vardır şu:Raylar: Alt sınıf I çalışıyorum Rails uygulamasında üst sınıfın
# app/models/a.rb
class A < ActiveRecord::Base; ...; end
# app/models/b.rb
class B < A; ...; end
# /app/elsewhere...
do_case(B.new)
def do_case(letter)
case letter
when A
"not nil"
end
end
Ben o kadar beklenen ve ben "değil almak gerçekleştirir yerel bu çalıştırdığınızda sıfır "dönüş değeri olarak. Ama test ortamımda nil
'u buluyorum.
test ortamı A
ataları letter
(B.new
) arasında (B.ancestors
) arasında olduğunu göstermektedir, ama bu durum eşitlik operatörü veya is_a?(A)
ile bir alt sınıf olarak kayıt başarısız olur.
A === B.new #=> false in test environment, true locally
B.new.is_a?(A) #=> false in test environment, true locally
Bu Raylar autoloading sorun gibi görünüyor, ama ben üst sınıf iki ortamda da atalarının yer alıp almadığını bu yöntemler başarısız olacağını niçin emin değilim. Neler oluyor?
yeniden edilemedi. – Ilya
@Ilya Oldukça eminim ki uygulamadaki diğer birçok sınıfın neden olduğu bir boşaltma sorunu. Burada çoğalmayacak kadar büyük, repoya bağlanmak için çok özel. – steel
Bu, "yay" ile ilgili bir sorun olabilir. 'Spring' kullanıyor musunuz? Eğer öyleyse, önce 'baharı' öldürmeyi dene, sonra testini tekrar dene. Söylediğin gibi, 'case/when'' is_a? 'Çağrılarını kullanmalı ve 'B.new.is_a? (A)' 'true' döndürecektir. – etagwerker