2009-08-18 17 views
64

में नष्ट हो गया था तो वहाँ अगर कुछ नया हैचेक अगर रिकॉर्ड सिर्फ रेल

record.new_record? 

जांच करने के लिए

मैं अगर कुछ है जिस तरह से बाहर है पर जांच करने की आवश्यकता है।

record = some_magic 
record.destroy 
record.is_destroyed? # => true 

ऐसा कुछ। मुझे पता है कि नष्ट करने से ऑब्जेक्ट फ्रीज हो जाता है, तो जमे हुए? कामों की तरह, लेकिन क्या इस कार्य के लिए कुछ स्पष्ट रूप से है?

उत्तर

40

आप यह कर सकते हैं।

Record.exists?(record) 

हालांकि यह डेटाबेस पर एक हिट करेगा जो वास्तव में आवश्यक नहीं है। एकमात्र अन्य समाधान जिसे मैं जानता हूं वह कॉलबैक करना है जैसा कि उल्लिखित है।

attr_accessor :destroyed 
after_destroy :mark_as_destroyed 
def mark_as_destroyed 
    self.destroyed = true 
end 

और फिर record.destroyed देखें।

+2

मुझे लगता है कि कुछ संदर्भ यहां सहायक हैं। यह इस बात पर निर्भर करता है कि आप क्यों जानना चाहते हैं कि कोई ऑब्जेक्ट नष्ट हो गया है या नहीं। यदि आप इसे यूनिट टेस्ट के हिस्से के रूप में कर रहे हैं, तो डेटाबेस के खिलाफ अतिरिक्त हिट ठीक है। यदि आप इसे ऐप के हिस्से के रूप में कर रहे हैं, तो दूसरा मार्ग जाकर बेहतर शर्त हो सकती है। – jerhinesmith

+49

यह अब आवश्यक नहीं है, 'object.destroyed' का उपयोग करें? – Rob

+0

http://stackoverflow.com/a/3462595/850996 रेल 4 में सही उत्तर –

0

अपने ऐप के तर्क को जानने के बिना, मुझे लगता है कि जमे हुए? तुम्हारा सबसे अच्छा शर्त है।

यह विफल होने पर, आप निश्चित रूप से कॉलबैक में ट्रिगर करने वाले अपने मॉडल में "नष्ट" विशेषता जोड़ सकते हैं और यदि आप अधिक सटीक समाधान चाहते हैं तो इसके खिलाफ जांच की जा सकती है।

4

destroy किसी ऑब्जेक्ट में किसी ऑब्जेक्ट को freeze (जहां तक ​​मुझे पता है) पर कॉल के अलावा कुछ भी वापस नहीं करता है, इसलिए मुझे लगता है कि frozen? आपकी सबसे अच्छी शर्त है। आपका दूसरा विकल्प ActiveRecord::RecordNotFound से बचाव करना है यदि आपने record.reload जैसे कुछ किया है।

मुझे लगता है कि ऊपर माइक की रणनीति सबसे अच्छी हो सकती है, या आप इन मामलों के लिए एक रैपर लिख सकते हैं यदि आप 'धारणाएं बनाना' शुरू करना चाहते हैं।

चीयर्स।

+0

मैं वर्तमान में जमे हुए चेक की जांच करता हूं? लेकिन वास्तव में मैं कुछ लोड कर सकता हूं और इसे फ्रीज कर सकता हूं कुछ अन्य उद्देश्य, और यह एक झूठ होगा ... वर्तमान स्थिति में, जमे हुए? ठीक काम करता है, लेकिन मैं इसे लंबे समय तक भरोसा नहीं करना चाहता हूं। –

10

यह बहुत जल्द आ रहा है। नवीनतम Riding Rails पोस्ट में, यह इस का कहना है: - अन्य प्रतिबद्ध के दर्जनों के बीच -

और अंत में, यह जरूरी BugMash से संबंधित नहीं है, लेकिन जोस Valim model.destroyed जोड़ा ?. यह निफ्टी विधि केवल तभी वापस आ जाएगी जब उदाहरण आप वर्तमान में देख रहे हैं सफलतापूर्वक नष्ट हो गया है।

तो वहां आप जाते हैं। जल्द आ रहा है!

166

बस इसे करते हैं:

record.destroyed? 

विवरण यहां ActiveRecord::Persistence

+0

यह ActiveRecord :: हठ मॉड्यूल का हिस्सा है: http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html –

+0

@Kevin: धन्यवाद! मेरा जवाब अपडेट किया है। समय के रूप में सब कुछ बदल जाता है :) – Voldy

4

हैं record.destroyed जबकि? ठीक काम करता है, और सच या गलत लौटाता है, आप इसे थोड़ा सा भी ड्रॉ कर सकते हैं और उस लाइन पर अगर शर्त को कॉल कर सकते हैं जिसे आप अपने कंट्रोलर में नष्ट करते हैं।

record = Object.find(params[:id]) 
if record.destroy 
    ... happy path 
else 
    ... sad path 
end 

इस पोस्ट को समझें खेल में थोड़ा देर हो चुकी है।लेकिन क्या कोई इस पर और चर्चा करना चाहता है, मैं खेल हूं! साइड नोट: मेरे मॉडल पर बाद में डिस्ट्रॉय सत्यापन भी था और यह काम करते समय, इस तरह के कुछ के लिए एक अलग विधि ओवरकिल की तरह लगती है;)

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