रेल 3.0 में वास्तव में क्या हैं?


86

मैं समझता हूं कि यह ActiveRecord के लिए एक प्रतिस्थापन है और यह प्रश्नों के बजाय वस्तुओं का उपयोग करता है।

परंतु...

यह बेहतर क्यों है?

क्या ऑब्जेक्ट / क्वेश्चन बनाना "आसान" होगा?

क्या यह अधिक कुशल SQL प्रश्नों को जन्म देगा?

क्या यह सभी प्रमुख डीबी के साथ संगत होगा? - मुझे लगता है कि यह होगा।

क्या संग्रहीत प्रक्रियाओं के साथ उपयोग करना आसान / कठिन होगा?

जवाबों:


182

रेल 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 में गणित और कंप्यूटर विज्ञान में कुछ मजबूत नींव हैं, उन नींव हैं जो इसे इसके शक्तिशाली गुण देते हैं।


उत्कृष्ट जवाब। मैंने आपके द्वारा पोस्ट की गई लिंक को पढ़ा था और अधिकांश भाग के लिए इसका अनुसरण किया था। वास्तव में COMP विज्ञान हिस्सा समझ में आता है, लेकिन यह कैसे रेल में शामिल किया गया था जहाँ मैं समस्याओं था। यह मेरे लिए बहुत अधिक समझ में आता है कि यह हाथ से तैयार किए गए एसक्यूएल (या जो कुछ भी) की जगह लेता है और इस तरह एआर 3.0 में इसके ऊपर बनाया गया है। मुझे उन लोगों के लिए अलग-अलग इंप्रेशन मिल रहे थे, जिन्हें बेहतर पता होना चाहिए और यह उत्तर ऊपर प्रत्येक प्रश्न के सरल और सटीक विवरण में शानदार है।
होगा

मेरे पास एक अनुवर्ती प्रश्न है। आपने ऊपर LDAP, AMZ, आदि का उल्लेख किया है, मेरा मानना ​​है कि वर्तमान में (रेल पर / रेलगाड़ी पर आधारित) ARel में वह क्षमता नहीं है, बस क्षमता है? यानी जब तक कोई उस हिस्से को लागू नहीं करता। यह हालांकि सुपर रोमांचक लगता है।
होगा

2
@Will - मुझे लगता है कि आपको उन मजेदार क्षमताओं को विकसित करने के लिए किसी की प्रतीक्षा करनी होगी। या अपने आप को एक दरार लें, क्या आपको इसकी आवश्यकता होनी चाहिए?
माइक वुडहाउस

1
+1, हालांकि लिंक मृत है; भोली खोज को वर्तमान लिंक नहीं मिला।
डेव न्यूटन

@DaveNewton: जाहिरा तौर पर, यह चला गया है। वहाँ कुछ कैश्ड प्रतियाँ तैर रही हैं, जैसे bmark.us/bmark/readable/913ff84fc0dcdc
Jörg W Mittag

19

ARel, दुर्भाग्य से सीधे SQL उत्पन्न करने के लिए बंधा हुआ है और इस प्रकार DataMapper की जरूरतों के लिए अनुपयुक्त है।

जिस तरह से मैं इसे लगाऊंगा वह यह है कि ARR, ActiveRecord के लिए एक स्पष्ट क्वेरी मॉडल है जो RDDMSes के लिए SQL प्रश्नों को उत्पन्न और अनुकूलित करता है।

दूसरी ओर DataMapper डेटा के लिए एक वास्तविक मैपर है, और पहले से ही गैर-संबंधपरक डेटा स्टोर के साथ इंटरफ़ेस कर सकता है। भविष्य में DataMapper में वेरिटास नामक एक अलग लाइब्रेरी को शामिल करने की संभावना है, जिसका उद्देश्य केवल RDBMSes ही नहीं, बल्कि किसी भी डेटा स्टोर से डेटा को रिलेशनल फंक्शनलिटी प्रदान करना है।


2
यह क्यों प्राप्त किया -1?
जेरिको

10
मैं DataMapper का अनुचर हूं, और जो भी जानता है वह सच है। AREL, यह वर्तमान कार्यान्वयन में, DataMapper के नीचे उपयोग नहीं किया जा सकता है क्योंकि यह केवल 40+ डेटास्टोर्स के साथ काम करने के लिए आवश्यक कार्यक्षमता का सबसेट प्रदान करता है जो DM समर्थन करता है। IMHO वर्तमान कार्यान्वयन कसकर SQL पीढ़ी के लिए युग्मित है, और यह RDBMS से काफी अलग डेटास्टोर्स के साथ काम करने के लिए एपीआई / आंतरिक को ठीक करने के लिए काम का एक बहुत ले जाएगा। ARel एक कदम आगे है, लेकिन यह इस समय ActiveRecord से अधिक के लिए आधार नहीं बना सकता है।
dkubb

1

रेल 3 में Arel संबंध वस्तुएं बनाता है जहां db की आवश्यकता नहीं है। बहुत अधिक कुशल।

यह और भी स्वाभाविक है (एक बार जब आपको इसकी आदत हो जाती है) जो वास्तव में रेल की महान ताकत है।


0

वास्तव में मैंने ActiveRelation पर एक वीडियो श्रृंखला शुरू की है।

पहले सामान्य ट्यूटोरियल को http://Innovative-Studios.com/#pilot पर देखा जा सकता है


मुझे भी वीडियो पसंद आया। बुनियादी की तरह था, लेकिन मैं अतिरिक्त नई जानकारी के कुछ बिट gleaned। बाद के वीडियो देखना चाहेंगे!
पर्पलजेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.