रेल 3 में मैं उन मौलिक क्षणों के लिए कच्चे एसक्यूएल को स्वच्छ करने के लिए sanitize_sql_array
का उपयोग कर सकता हूं जहां कच्चे SQL क्वेरी की आवश्यकता होती है। लेकिन ऐसा लगता है कि रेल 4 में हटा दिया गया है, या इतना हटाया नहीं गया है, लेकिन ActiveRecord :: Sanitization में स्थानांतरित हो गया है। हालांकि, मैं यह नहीं समझ सकता कि sanitize_sql_array
पर कॉल कैसे करें, तो रेल 4 में कच्चे एसक्यूएल को स्वच्छ करने का सबसे अच्छा तरीका क्या है?रेल में कच्चे एसक्यूएल को स्वच्छ करने के लिए कैसे करें 4
मैं यह स्पष्ट करना चाहता हूं कि मैं रेल के मॉडल का उपयोग न करने के लिए यहां एक पूर्ण कच्चे SQL क्वेरी के बारे में बात कर रहा हूं। मुझे पता है कि यह सबसे अच्छा अभ्यास नहीं है, यह वही है जो मुझे इस विशिष्ट क्वेरी के लिए करना है क्योंकि इसे रेल के अच्छे ActiveRecord इंटरफ़ेस द्वारा प्रदर्शित नहीं किया जा सकता है (मेरा विश्वास करो, मैंने कोशिश की है)। एक SQL क्वेरी को साफ़ करने में Active Record docs, सबसे अच्छा तरीका से
query = "SELECT * FROM users
LEFT OUTER JOIN posts ON users.id=posts.user_id
AND posts.topic_id = '#{topic.id}'"
# ^- Obviously bad and very vulnerable, this is what we're trying to fix
ActiveRecord::Base.connection.select_all(query)
हैं अरे निक, प्रतिक्रिया के लिए धन्यवाद, लेकिन मैं एक जवाब है कि कच्चे एसक्यूएल प्रश्नों के माध्यम से जो मत जाओ के लिए काम करेगा लिए देख रहा था ActiveRecord मॉडल। मैंने इसे थोड़ा और स्पष्ट करने के लिए अपना प्रश्न अपडेट कर दिया है। –
@ कोल्टनवॉज क्षमा करें, मैंने सवाल को गलत समझा। जैसा कि @ गैब्रियलहिलाल ने कहा था, 'उद्धरण' कच्चे एसक्यूएल क्वेरी को बिना किसी सक्रिय ActiveCecord मॉडल – NickGnd
का उपयोग करने का सही तरीका है, यह उत्तर एसक्यूएल इंजेक्शन के लिए आदरणीय है, '# {user_name}' का उपयोग करके यह गलत है। – Hardik