इस सवाल का जवाब ActiveRecord
से आना है और न ही यह रेल का कौन सा संस्करण के लिए यह होना चाहिए निर्दिष्ट है कि निर्दिष्ट नहीं है। यही वजह है कि (और क्योंकि यह ऊपर और कुछ में से एक है) कैसे रेल में पैरामीटर को साफ़ करने में पर जवाब ...
यहाँ एक समाधान है कि रेल 4 के साथ काम करता है: आपके पास
ActiveRecord::Sanitization::ClassMethods
में sanitize_sql_for_conditions और उसके दो अन्य उपनाम: sanitize_conditions और sanitize_sql। तीन सचमुच एक ही चीज़ करते हैं।
sanitize_sql_for_conditions
एक सरणी, हैश, या SQL स्थिति का स्ट्रिंग स्वीकार करता है और एक के लिए एक वैध एसक्यूएल टुकड़ा में sanitizes उन्हें कहां खंड।
इसके अलावा ActiveRecord में आप
sanitize_sql_for_assignment
जो
एक सरणी, हैश, या SQL स्थिति का स्ट्रिंग स्वीकार करता है और एक सेट खंड के लिए एक वैध एसक्यूएल टुकड़ा में उन्हें sanitizes है।
- तरीकों से ऊपर ActiveRecord में शामिल हैं :: डिफ़ॉल्ट रूप से बेस और इसलिए किसी भी ActiveRecord मॉडल में शामिल हैं।
इसके अलावा, हालांकि, ActionController में आप ActionController::Parameters
जो आप
की अनुमति देता है जो गुण बड़े पैमाने पर अद्यतन करने के लिए सजग किए जाने चुनते हैं और इस प्रकार गलती से जो उजागर नहीं किया जाना चाहिए कि उजागर रोकने । इस उद्देश्य के लिए दो विधियां प्रदान करता है: और परमिट की आवश्यकता है।
params = ActionController::Parameters.new(user: { name: 'Bryan', age: 21 })
req = params.require(:user) # will throw exception if user not present
opt = params.permit(:name) # name parameter is optional, returns nil if not present
user = params.require(:user).permit(:name, :age) # user hash is required while `name` and `age` keys are optional
"पैरामीटर जादू" सशक्त पैरामीटर (docs here) कहा जाता है और आपको लगता है कि उपयोग कर सकते हैं यह एक मॉडल को भेजने से पहले एक नियंत्रक में पैरामीटर को साफ़ करने में।
- उपरोक्त विधियों
ActionController::Base
में डिफ़ॉल्ट रूप से शामिल किए गए हैं और इसलिए किसी भी रेल नियंत्रक में शामिल हैं।
मुझे उम्मीद है कि केवल किसी को सीखने और रेल को नष्ट करने में मदद मिलेगी! :)
स्रोत
2016-02-24 16:56:32
क्या आप हमें थोड़ा और संदर्भ दे सकते हैं? 'sanitize_sql' और मित्रों को अक्सर एआर :: बेस-व्युत्पन्न कक्षाओं के अंदर बुलाया जाता है, दृश्यता को बदलने की आवश्यकता के बिना – pilcrow
यह एक अच्छा और वैध बिंदु है। जब मैं किसी के निजी या संरक्षित तरीकों का उपयोग करता हूं तो मैं बस क्रिंग करता हूं। – dimus