2015-06-07 14 views
7

में वैकल्पिक पोस्ट पैरामीटर मेरे पास एक फीनिक्स मार्ग है जो मैं कुछ फॉर्म डेटा पोस्ट करना चाहता हूं, हालांकि वैकल्पिक रूप से फॉर्म के लगभग 4 फ़ील्ड हैं (फॉर्म अंतिम उपयोगकर्ता द्वारा बनाया गया है और इसलिए ये फ़ील्ड हो सकते हैं POST पेलोड में मौजूद नहीं है)एलिक्सीर फीनिक्स

मार्ग के लिए फीनिक्स नियंत्रक में, आप इसे कैसे संभालेंगे?

उदाहरण के लिए:

मेरे प्रपत्र

Field1, 
Field2 
Field3 (optional) 
Field4 (optional) 
Field5 (optional) 

है और प्रपत्र पोस्टिंग हमेशा Field1 और Field2 होना आवश्यक है लेकिन अन्य क्षेत्रों के किसी भी संयोजन हो सकता है।

तो मेरे नियंत्रक कोड अब तक इस तरह है:

def create(conn, %{"field1" => field1, "field2" => field2) do 
end 

मैं कैसे अन्य 3 वैकल्पिक कर सकता हूँ? यदि मैं उन्हें सब कुछ जोड़ता हूं तो उन्हें आवश्यकता होगी और मैं संभावित रूप से सबमिट किए गए प्रत्येक रूप के लिए एक फ़ंक्शन नहीं करना चाहता क्योंकि यह अधिकतर लगता है।

उत्तर

19

नियंत्रक द्वारा प्राप्त पैरामीटर सिर्फ एक मानचित्र हैं, इसलिए आप शायद Map.get/3 जैसे कुछ ढूंढ रहे हैं। इस समारोह के साथ, आप इन पंक्तियों पर कुछ कर सकते हैं:

def create(conn, %{"field1" => f1, "field2" => f2} = params) do 
    f3 = Map.get(params, "field3", "my default value") 
    # similar for the other fields 
end 

तुम भी एक नक्शा है कि वैकल्पिक पैरामीटर के लिए सभी डिफ़ॉल्ट मान हैं बना सकते हैं और उसके बाद का उपयोग Map.merge/2:

@optional_params %{"field3" => "default3", "field4" => "default4"} 

def create(conn, %{"field1" => f1, "field2" => f2} = params) do 
    # `params` has precedence over `@optional_params`, that's why we're using it 
    # as the second argument here. 
    params = Map.merge(@optional_params, params) 
end 
+0

धन्यवाद बहुत बहुत, अब स्पष्ट है कि आपने इसे पोस्ट किया है :) – TheStoneFox

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