के कहने मैं में काम कर रहा हूँ एक रेल ऐप्लिकेशन में के रूप में पंजीकरण नहीं, मैं की तरह कोड है निम्नलिखित:रेल: उपवर्ग माता पिता वर्ग
# 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
जब मैं इस स्थानीय रूप से चलाने के रूप में की उम्मीद करता है और मैं नहीं मिल " शून्य "वापसी मूल्य के रूप में। लेकिन मुझे अपने परीक्षण वातावरण में nil
मिल गया है।
परीक्षण वातावरण से पता चलता है कि A
पूर्वजों letter
(B.new
) की (B.ancestors
) के बीच है, लेकिन मामले समानता ऑपरेटर या is_a?(A)
के साथ एक उपवर्ग के रूप में रजिस्टर करने के लिए विफल रहता है।
A === B.new #=> false in test environment, true locally
B.new.is_a?(A) #=> false in test environment, true locally
यह एक रेल autoloading मुद्दे की तरह लगता है, लेकिन मुझे यकीन है कि क्यों इन तरीकों अगर माता पिता वर्ग दोनों परिवेशों में पूर्वजों में शामिल है में नाकाम रहने की जाएगी नहीं हूँ। क्या चल रहा है?
पुन: पेश नहीं कर सका। – Ilya
@Ilya मुझे यकीन है कि यह एप्लिकेशन में कई अन्य वर्गों के कारण एक ऑटोलोडिंग समस्या है। रेपो से जोड़ने के लिए यहां बहुत निजी, पुन: पेश करने के लिए बहुत बड़ा है। – steel
यह संभवतः 'वसंत' के साथ एक मुद्दा है। क्या आप 'वसंत' का उपयोग कर रहे हैं? यदि ऐसा है, तो पहले 'वसंत' को मारने का प्रयास करें, फिर अपने परीक्षण को फिर से प्रयास करें। जैसा कि आपने कहा था, 'if_a?' कॉल का उपयोग करना चाहिए और 'bnew.is_a? (ए) '' सत्य' वापस कर देगा – etagwerker