2013-04-26 20 views
5

क्या मजबूत पैरामीटर का उपयोग करके आवश्यक हैश की एक विशेषता को चिह्नित करना संभव है?मजबूत पैरामीटर्स को एक विशेषता की आवश्यकता होती है

को देखते हुए इनपुट की तरह:

{ 
    "example" => { 
    "optional": 1234, 
    "required": 5678 
    } 
} 

मानक मजबूत पैरामीटर उदाहरण हैं:

params.require(:example).permit(:optional, :required)

यह देखते हुए कि आप कुछ मापदंडों की आवश्यकता होती है सकते हैं, मैंने सोचा कि निम्नलिखित काम करेगा:

params.require(:example).require(:required) 
params.require(:example).permit(:optional) 

मैंने कोशिश की है:

params.require(:example => [ :required ]).permit(:optional) 
params.require(:example).permit(:optional) 
params[:example].require(:required) 

और कुछ भी मैं सोच सकता हूं।

क्या किसी को पता है कि यह संभव है?

उत्तर

5

ग्रेग!

मेरे पास एक ही सवाल था, लेकिन बाद में मुझे पता चला कि यह उचित सवाल नहीं है।

def require(key) 
    self[key].presence || raise(ActionController::ParameterMissing.new(key)) 
end 

तो, मूल रूप से, वहाँ पैरामीटर हैश में "आवश्यक" विशेषता की आवश्यकता के लिए कोई रास्ता नहीं है:

देखो, यहाँ strong_parameters मणि में विधि की आवश्यकता होती है स्रोत कोड है। लेकिन इसे अलग तरफ से देखो। मुझे लगता है कि ऐसा करने के लिए इसे अपनी खुद की आवश्यकता विधि बेहतर ढंग से लिखें। चूंकि मैं रेल का उपयोग कर रहा हूं, इसलिए मैंने मॉडल में validates_presence_of जोड़ा है। यदि आप इसे गतिशील बनाना चाहते हैं, तो आप कस्टम सत्यापन बना सकते हैं। आप इसके प्रलेखन यहाँ पा सकते हैं:

http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#performing-custom-validations

+0

धन्यवाद रनफ़ोर। मैं एक ही निष्कर्ष पर आया था। मेरे मामले में उपस्थिति आवश्यकता संसाधन के उपयोग के तरीके पर सशर्त है (यानी नियंत्रक के माध्यम से) लेकिन मैं इसके साथ मदद करने के लिए कुछ सशर्त सत्यापन करने में सक्षम हूं। –

0

आप क्या कर सकते

def example_params 
    params.require(:example) 
    params[:example].require(:required) 
    params.require(:example).permit(:required, :optional) 
end 

पहली पंक्ति विफल रहता है :example याद आ रही है का उपयोग करें। दूसरी पंक्ति विफल होती है अगर :required:example से गुम है। :optional की अनुमति देते हुए, तीसरी पंक्ति आपको जो अपेक्षा करती है वह लौटाती है।

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