ruby on rails - loaded? always returns true for belongs_to associations? -


मेरे पास कुछ भूगोल संबंधित वर्गीकृत परिभाषित निम्न प्रकार हैं:

  class स्थान & lt; ActiveRecord :: बेस एंड क्लास राज्य & lt; स्थान है_मालक: भौगोलिक क्षेत्र में है: शहरों में है: शहरों में काउंटी का अंत वर्ग काउंटी & lt; स्थान is_to: राज्य has_many: भौगोलिक है has_many: शहरों, के माध्यम से = & gt; : भौगोलिक,: uniq = & gt; सच अंत वर्ग सिटी & lt; स्थान से संबंधित है: राज्य है has_many: भौगोलिक है has_many: counties,: through = & gt; : भौगोलिक,: uniq = & gt; सच अंत वर्ग भूगोल & lt; ActiveRecord :: बेस is_to: state is_to: city is_to: county end  

निम्न कंसोल आउटपुट मुझे लगता है कि समस्या को दर्शाता है।

  & gt; & gt; County.first.cities.loaded? = & Gt; झूठी & gt; & gt; County.first.state.loaded? = & Gt; सच  

लॉग में देख रहे हैं मैं देख रहा हूँ कि जब मैं राज्य को कॉल करता हूं। लोड हो जाता है? यह राज्य को लोड करने के लिए एक एसक्यूएल स्टेटमेंट चलाता है, अर्थात् राज्य तब तक लोड नहीं हुआ जब तक कि मैंने इसे छुआ। हालांकि, जब मैं शहरों को लोड करता हूं। कोई एसक्यूएल निष्पादित नहीं है और गलत लौटा है। यह व्यवहार मेरे लिए असंगत है मैं अंतर पर थोड़ा सा खोज रहा था और इस बारे में कुछ भी नहीं मिला, इसलिए मैं अपनी गलती का अनुमान लगा रहा हूं, हालांकि, मुझे नहीं पता कि कैसे।

किसी भी मदद की बहुत सराहना की है।

अग्रिम धन्यवाद।

मुझे लगता है कि इसे इस्तेमाल होने वाले रिश्ते के नीचे आता है और आलसी लोडिंग के साथ संपर्क।

जब आप काउंटी.first.state को कॉल करते हैं, तो रेलवे उस राज्य की वस्तु को लोड करेगा जो काउंटी के अंतर्गत आता है - केवल एक ही है, और इसलिए एक कॉल .स्टेट वास्तव में एक है

हालांकि, जब आप County.first.cities को कॉल करते हैं, तो आप वास्तव में रिश्ते संग्रह को कॉल कर रहे हैं काउंटी ऑब्जेक्ट जैसा कि आप वास्तव में किसी विशिष्ट ऑब्जेक्ट या स्थितियों के सेट नहीं कॉल करते हैं, रेल पर्याप्त रूप से स्मार्ट है, संग्रह को लोड नहीं करना है।

यदि आपने ऐसा कुछ कहा है:

  काउंटी .first.cities.all काउंटी.first.cities.each काउंटी.first.cities.first  

रेल तो SQL कथन को बंद करेगा और डेटा को लोड करेगा।


Comments

Popular posts from this blog

objective c - iPhone and it's wireless area -

unix - Listing all shared memory segments used by a process on AIX5.3+ -

tsql - Correct sql/hql query (aggregate in where clause) -