2011-08-23 12 views
7

क्या विधि द्वारा गतिशील खोज/निर्माण के साथ सत्यापन को छोड़ना संभव है?मान्यताओं को कैसे छोड़ें w/find_or_create_by_?

नियमित के साथ उदाहरण के लिए बचाने के लिए मैं कुछ ऐसा कर सकते हैं:

p = Post.new 
p.title = nil 
p.body = nil 
p.save(:validate => false) 

find_or_create_by_title साथ भी ऐसा ही करने के लिए प्यार करोगे।

उत्तर

13

यह code in Rails right now के साथ संभव नहीं दिखता है, हालांकि आप कोड लिखने में थोड़ा अधिक वर्बोज़ होने के लिए बेहतर भाग्य प्राप्त कर सकते हैं। आप find_or_initialize_by_ का उपयोग कर सकते हैं जो एक नई वस्तु बनाता है लेकिन इसे सहेजता नहीं है। तब आप अपने कस्टम विकल्पों के साथ बचाने के कॉल कर सकते हैं, यह भी documentation में वे एक साफ संकेत दिया कि इतना मुश्किल है कि मैं इसे नीचे में शामिल होंगे:

# No 'Winter' tag exists 
winter = Tag.find_or_initialize_by_name("Winter") 
winter.new_record? # true 

गुड लक और अगर आप में और अधिक सूचकों की जरूरत है मुझे पता है सही दिशा

+0

बहुत बहुत धन्यवाद। जिस तरह से मैं चला गया है! उत्तर देने के लिए समय निकालने की सराहना करें। –

1

कुछ मामलों के लिए, find_or_initialize_by_ उपयोगी नहीं होगा और find_or_create_by के साथ सत्यापन को छोड़ने की आवश्यकता होगी।

इसके लिए आपको विकल्प प्रवाह और ROR की विधि नीचे का उपयोग कर सकते हैं:

  • अद्यतन इस तरह अपने मॉडल:

वर्ग पोस्ट < ActiveRecord :: बेस

attr_accessor: skip_validation
संबंधित_to: उपयोगकर्ता
validates_presence_of: शीर्षक, जब तक: skip_validation

अंत

  • आप इस तरह अब इसका इस्तेमाल कर सकते हैं:
    Post.where(user_id: self.id).first_or_create!(skip_validation: true)

मैं find_or_create_by के बजाय first_or_create का इस्तेमाल किया है यहाँ। आप इसके साथ अधिक कॉलम नाम और मान पास कर सकते हैं, और आपकी सत्यापन इस के साथ काम नहीं की जाएगी।

  • आप मजबूत मापदंडों अंत और इस 'skip_validation' की अनुमति के लिए तो यह है, जबकि प्रविष्टियों जोड़ने सत्यापन के साथ काम करेंगे कोई जरूरत के लिए किसी भी परिवर्तन के बिना जारी रख सकते हैं।

  • इसका उपयोग करके, आप इसे पैरामीटर पास करके सत्यापन के साथ और बिना उपयोग कर सकते हैं।

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