2012-06-18 7 views
5

मुझे पता है तुम हो सकता है:किसी नेस्टेड संसाधन को अस्वीकार करने के लिए अस्वीकार कर दिया जा सकता है यदि किसी को छोड़कर सभी फ़ील्ड खाली हैं?

accepts_nested_attributes_for :foo, :reject_if => proc { |a| a[:bar].blank? } 

वहाँ एक रास्ता बजाय कहने के लिए

accepts_nested_attributes_for :foo, :reject_if => blah[:bar].blank? and flah[:bar].blank? 

या

की तरह कुछ
accepts_nested_attributes_for :foo, :reject_if => all fields except record_date.blank? 

धन्यवाद

+0

एक ही सवाल। एक proc में सभी रिक्त फ़ील्ड सूचीबद्ध करना बहुत DRY नहीं है ... मेरे पास एक डिफ़ॉल्ट बॉक्स के साथ एक चयनित बॉक्स वाला घोंसला वाला रूप है (खाली नहीं हो सकता है)। मैं उस मूल्य को अनदेखा करना चाहता हूं लेकिन मैंने कुछ साफ नहीं देखा है ... –

उत्तर

0

इस से प्रेरित है: https://rails.lighthouseapp.com/projects/8994/tickets/2501-any_blank-and-all_blank-options-for-accepts_nested_attributes_for-reject_if

यह मेरे लिए ठीक काम किया:

reject_if: proc { |attributes| attributes.all? {|k,v| v.blank? || ['foo', 'bar', 'baz'].include?(k)} } 

आप केवल एक अपवाद नहीं है लेकिन पहले वाक्य रचना कई लोगों के लिए proc तैयार करता है तो k == 'foo' द्वारा ['foo', 'bar', 'baz'].include?(k) बदल सकते हैं।

+0

इसे रेल 5 के तहत कोशिश की, यह काम नहीं कर रहा है। –

9

मैं इस पर थोड़ी देर हो चुकी हूँ, लेकिन आप कर सकते हैं:

accepts_nested_attributes_for :foo, 
           reject_if: ->(attributes){ 
           attributes.except(:key).values.all?(&:blank?) 
           } 
+0

यह स्वीकार्य उत्तर होना चाहिए - यह स्वच्छ और प्रभावी है। –

+1

धन्यवाद! एक और देर से नोट: 'छोड़कर' का उपयोग करते समय स्ट्रिंग कुंजियों से सावधान रहें। इन मामलों के आसपास काम करने के लिए आप 'attributes.with_indifferent_access' का उपयोग कर सकते हैं। –

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