2013-04-06 10 views
33

का उपयोग कर कच्ची क्वेरी क्या वर्तमान में Rails 4.0.0.beta1 में ActiveRecord का उपयोग करके कच्चे SQL चयन क्वेरी करने का कोई तरीका है? मैं ActiveRecord :: Base.execute अब मौजूद नहीं देखता हूं। इस बारे में जाने का सही तरीका क्या है?रेल 4, ActiveRecord

उत्तर

49

यहाँ इस का चयन करें उदाहरण कोशिश ..:

query = "select ...." 
results = ActiveRecord::Base.connection.execute(query) 
+1

स्पष्ट रूप से इसे नियंत्रक से कॉल करते समय इसे बहिष्कृत किया जाता है। 'अस्वीकरण चेतावनी: # कनेक्शन को कक्षा के माध्यम से एक्सेस करने के पक्ष में बहिष्कृत किया गया है। – Vortico

+1

ऐसा इसलिए है क्योंकि आपको सीधे नियंत्रक – ant

+0

में डेटाबेस तक पहुंचने के बजाय डेटाबेस के साथ डेटाबेस से बातचीत करने देना चाहिए @ क्या मुझे लेनदेन खोलना चाहिए या कनेक्शन खोलना चाहिए कस्टम एसक्यूएल क्वेरी निष्पादन के लिए पर्याप्त हो? [पास्ता उदाहरण] (http://pastie.org/10111824) – gaussblurinc

10

रेल 4 (शायद पिछले संस्करणों के रूप में अच्छी तरह से) में, यदि आप गति के लिए एक कस्टम क्वेरी के साथ जा रहे हैं, तो आप एक :skip_logging तर्क को जोड़ सकते हैं लॉग के लिए लिख से बचने:

query = "SELECT ..." 
results = MyModel.connection.execute(query, :skip_logging) 

(नोट: मैं सही ढंग से स्रोतों पढ़ रहा हूँ, तो यह PostgreSQL में सच नहीं हो सकता है।)

+0

मैं एसक्यूएल इंजेक्शन कैसे रोकूं? – yeyo

+5

जो अपने आप से एक उत्कृष्ट प्रश्न बनायेगा (जब तक कि इसका पहले से ही उत्तर नहीं दिया गया हो) - क्या आप सहमत नहीं हैं? –

+0

हाँ, मुझे विश्वास है कि आप सही हैं। – yeyo

26

बस मेरे दस पैसे के एक कच्चे जोड़ने के लिए, Model.connection.execute का उपयोग कर क्वेरी एक ActiveRecord मॉडल नहीं लौटाएगी - यह एक कच्चा डेटा सेट लौटाएगी।

निम्नलिखित ActiveRecord मॉडल वापस आ जाएगी:

MyModel.find_by_sql(query) 

संपादित करें: है कि आप एक का चयन चला रहे हैं निश्चित रूप से यह सोचते हैं।

संबंधित मुद्दे