रेल 3.0 में वास्तव में क्या हैं?
यह रिलेशनल क्वेरी ऑपरेटर्स के बीजगणित के लिए ऑब्जेक्ट मॉडल है।
मैं समझता हूं कि यह ActiveRecord के लिए एक प्रतिस्थापन है
नहीं, यह नहीं है। यह स्ट्रिंग में हैंड-क्राफ्टिंग एसक्यूएल प्रश्नों के लिए एक प्रतिस्थापन है। यह एक सामान्य क्वेरी लेयर है जो ActiveRecord को रेखांकित करती है , लेकिन इसका उपयोग उदाहरण के लिए DataMapper के अंडरपिनिंग के रूप में भी किया जा सकता है।
यदि यह किसी भी चीज़ के लिए एक प्रतिस्थापन है, तो यह एम्बिशन के लिए एक प्रतिस्थापन है। या, आप इसे LINQ मानक क्वेरी ऑपरेटरों या पायथन के SQLAlchemy के रूबी संस्करण के रूप में सोच सकते हैं। (वास्तव में, लेखक स्पष्ट रूप से LINQ और SQLAlchemy दोनों को प्रेरणा के रूप में उद्धृत करता है।)
या, आप इसे named_scope
एस के प्रतिस्थापन के रूप में देख सकते हैं । वास्तव में, ARel को इस विचार का बोध है कि "प्रत्येक प्रश्न एक है named_scope
"। और, whaddayaknow: दोनों एक ही आदमी द्वारा लिखे गए थे।
और यह प्रश्न के बजाय वस्तुओं का उपयोग करता है।
नहीं, यह वस्तुओं को प्रश्नों के रूप में उपयोग करता है ।
यह बेहतर क्यों है?
रूबी एक वस्तु-उन्मुख भाषा है, न कि एक स्ट्रिंग-उन्मुख भाषा। अकेले उस कारण के लिए , यह स्ट्रिंग के बजाय वस्तुओं के रूप में प्रश्नों का प्रतिनिधित्व करने के लिए समझ में आता है। सब कुछ के लिए तार का उपयोग करने के बजाय प्रश्नों के लिए एक उचित ऑब्जेक्ट मॉडल का निर्माण आपको बहुत अधिक समान लाभ देता है जो कि सब कुछ के लिए तार का उपयोग करने के बजाय एक लेखांकन प्रणाली के लिए उचित ऑब्जेक्ट मॉडल का निर्माण करता है।
एक और बड़ा फायदा यह है कि एआरएल क्वेरी ऑपरेटरों के एक वास्तविक बीजगणित को लागू करता है । दूसरे शब्दों में, एआरएल प्रश्नों के निर्माण और रचना के गणितीय नियमों के बारे में जानता है। यदि आप दो तारों को मिलाते हैं, जिनमें से प्रत्येक में एक वैध SQL क्वेरी है, तो परिणाम शायद एक वैध SQL क्वेरी नहीं है। या, और भी बदतर है, यह है एक वैध SQL क्वेरी, लेकिन एक है कि कोई मतलब नहीं है, या कि कुछ पूरी तरह से तुम्हें क्या लगता है यह करता है से अलग करता है। यह कर सकते हैं कभी नहीं अरेल के साथ हुआ। (यह वह लेख है जिसे मैं नीचे से जोड़ता हूं "रचना के तहत बंद" के साथ।)
क्या ऑब्जेक्ट / क्वेश्चन बनाना "आसान" होगा?
हाँ। उदाहरण के लिए, जैसा कि मैंने ऊपर उल्लेख किया है, सरल भागों से अधिक जटिल प्रश्नों का निर्माण करना बहुत आसान है।
क्या यह अधिक कुशल SQL प्रश्नों को जन्म देगा?
हाँ। तथ्य यह है कि एआरएल के पास प्रश्नों के लिए एक उचित ऑब्जेक्ट मॉडल है, इसका मतलब है कि यह उन प्रश्नों पर अनुकूलन कर सकता है जब तक कि यह वास्तविक SQL क्वेरी उत्पन्न करता है।
क्या यह सभी प्रमुख डीबी के साथ संगत होगा? - मुझे लगता है कि यह होगा।
हाँ। वास्तव में, मैंने हमेशा एसक्यूएल के बारे में बात की थी, लेकिन वास्तव में एक रिलेशनल क्वेरी बीजगणित बहुत अधिक सब कुछ के लिए प्रश्न उत्पन्न कर सकता है। फिर से, LINQ या Ambition को उदाहरण के रूप में देखें: दोनों SQL, LDAP, ActiveResource, CouchDB, Amazon, Google, ... सभी को एक ही सिंटैक्स के साथ क्वेरी कर सकते हैं।
शायद सबसे अच्छी चर्चा यह है कि एआरएल क्या है और निक कैलन ने क्यों लिखा है जिसे उपयुक्त रूप से आर्टिकल Why Arel नाम दिया गया है ? निक कल्लन द्वारा स्व । नोट: लेख में कुछ हल्के गणितीय और कंप्यूटर विज्ञान शब्दजाल शामिल हैं, लेकिन यह बिल्कुल सही बात है: ARel में गणित और कंप्यूटर विज्ञान में कुछ मजबूत नींव हैं, उन नींव हैं जो इसे इसके शक्तिशाली गुण देते हैं।