एक क्वेरी वस्तु (नहीं एक ए.आर. मॉडल)ActiveRecord का उपयोग कर क्वेरी ऑब्जेक्ट में पैरामीटर से बचें?
class ComplexQuery
QUERY = <<-SQL
...
SQL
def new(param1, param2)
...
end
def execute
# format and interpolate parameters into QUERY
# pass finished SQL to `execute` or `select_all`
end
end
मैं कैसे आसानी से सभी मापदंडों से बचने कर सकते हैं को देखते हुए?
मैं तीन तकनीकों के साथ सफल रहा हूं, लेकिन कोई भी सुविधाजनक नहीं है।
- उपयोग
raw_connection
जो (मेरे लिए)PG::Conn
का एक उदाहरण देता है औरexec_params
कहते हैं। मैं इससे संतुष्ट नहीं हूं क्योंकिexec_params
को डेटा प्रकार निर्दिष्ट करने के लिए तर्कों के वर्बोज़ सेट की आवश्यकता होती है। include ActiveRecord::Sanitization
मेरी क्वेरी ऑब्जेक्ट में और इसकी सुविधाजनक विधियों में से एक का उपयोग करें, जैसेreplace_named_bind_variables
। मैं इससे संतुष्ट नहीं हूं क्योंकिreplace_named_bind_variables
protected
है और मुझेsend
का उपयोग करना है।- इसके बजाय
module
लिखें। किसी कारण से, जब मैं मॉड्यूल मेंinclude ActiveRecord::Sanitization
करता हूं, तो मैं इसकी संरक्षित विधियों का उपयोग करने में सक्षम हूं। मैं इससे संतुष्ट नहीं हूं क्योंकि मैं कभी-कभी इसे निष्पादित किए बिना अपनी क्वेरी ऑब्जेक्ट को तुरंत चालू करना चाहता हूं, उदा। परीक्षण के लिए।
एक class
में ActiveRecord::Sanitization
सहित सबसे अच्छा समाधान की तरह लगता है, लेकिन मैं कुछ गलत कर दिया जाना चाहिए क्योंकि मैं एक protected
विधि का उपयोग करने में सक्षम होना चाहिए।
मैं एक समाधान है कि की तलाश में हूँ:
- से अधिक पैरामीटर
- ActiveRecord
- के उपभोक्ताओं द्वारा इस्तेमाल किया जा करने का इरादा है निकल जाता है एक पैरामीटर और यह प्रारूपों तदनुसार के डेटा प्रकार infers
मैं कुछ संबंधित प्रश्न ढूंढने में सक्षम था
- Escaping values in Rails (similar to mysql_real_escape_string()) एक मूल्य से बचने पर चर्चा करता है, या निजी तरीकों से
send
आईएनजी का सुझाव देता है। - एक अन्य प्रश्न (ActiveRecord Select with Parameter Binding) दिखाता है कि ActiveRecord :: बेस के उप-वर्ग में
sanitize_sql_array
का उपयोग कैसे करें, लेकिन मेरा प्रश्न यहां एक अलग क्वेरी ऑब्जेक्ट के बारे में है, न कि एआर मॉडल। - How to execute a raw update sql with dynamic binding in rails
उपर्युक्त के बारे में बात की गई सभी विधियां 'ActiveRecord' मणि से कुछ का उपयोग करती हैं! एक टेबल या मॉडल के बिना ActiveRecord के साथ तर्क करना मुश्किल है। –