2015-10-24 5 views
10

मैं यह जांचने का एक तरीका समझने की कोशिश कर रहा हूं कि फीनिक्स ऐप (एलिक्सीर का उपयोग करके) में पैरा हैश एक विशेष कुंजी है या नहीं।Elixir नक्शा चेक करें यदि खाली नहीं है और कुंजी मौजूद है

मॉडल में नीचे दिए गए परिवर्तन फ़ंक्शन में, पैरा को डिफॉल्ट किया गया है: खाली।

def changeset(model, params \\ :empty) do 

मुझे यह पता लगाने की आवश्यकता है कि नाम की एक कुंजी है: उपयोगकर्ता नाम हैश में मौजूद है।

उत्तर

12

बस एक छोटी शब्दावली बात, पैरा एक नक्शा है और हैश नहीं है। दस्तावेज में कहां देखना है यह जानना प्रासंगिक है।

मानचित्र के लिए has_key?/2 है जो true या false देता है।

Map.has_key?(params, :name) 

आप एक Ecto changeset उपयोग कर रहे हैं के बाद से तो आप भी Ecto.Changeset.get_change/3 उपयोग कर सकते हैं।

get_change(changeset, key, default \\ nil) 

यह रिटर्न defaultkey अगर सेट नहीं है। कृपया ध्यान दें कि यदि keynil पर सेट है तो nil अभी भी वापस कर दिया जाएगा। यदि nil आपके परिवर्तन के लिए एक अनुमत मान है तो आप एक अलग डिफ़ॉल्ट पैरामीटर सेट करना चाहेंगे।

9

गैज़लर का जवाब स्पष्ट रूप से वास्तव में अच्छा है। मैं मिश्रण में मिलान करने वाला पैटर्न जोड़ता हूं, जैसा कि मुझे लगता है, यह सबसे स्पष्ट समाधान है, जो न केवल फीनिक्स के साथ काम करता है, बल्कि किसी भी मानचित्र के साथ एलिक्सीर में भी काम करता है।

# head-only declaration for default params 
def changeset(model, params \\ :empty) 

def changeset(model, %{"username" => _} = params) do 
    # username field is in params 
end 

def changeset(model, params) do 
    # username is not in params 
end 
संबंधित मुद्दे