2012-09-28 11 views
7

का उपयोग कर नष्ट हो जाता है मैं किसी के कोड बेस को बनाए रखने कर रहा हूँ और वे कुछ इस तरह है:जांच करें कि ActiveRecord वस्तु .destroy() वापसी मान

if @widget_part.destroy 
    flash[:message] = "Error deleting widget part" 
else 
    flash[:message] = "Widget part destroyed successfully" 
end 

क्या destroy वापसी करता है? क्या इस तरह परीक्षण करना ठीक है? कारण मैं पूछ रहा हूं कि मैंने

flash[:message] = "Error deleting widget part : #{@widget_part.errors.inspect}" 

और कोई त्रुटि संदेश नहीं है इसलिए मैं उलझन में हूं। यह

#<ActiveModel::Errors:0x00000103e118e8 @base=#<WidgetPart widget_id: 7, ..., 
    id: 67>, @messages={}> 
+0

"विजेट भाग को हटाने में त्रुटि" अन्य भाग में नहीं होना चाहिए? – sheerun

+0

@sheerun, यही वह है जिसे मैं संदेह कर रहा था, लेकिन मुझे इसके लिए कोई दस्तावेज नहीं मिला – highBandWidth

उत्तर

5

यदि आप अनिश्चित हैं, तो आप destroyed? विधि का उपयोग कर सकते हैं। विनाश का वापसी मूल्य अनियंत्रित है, लेकिन यह केवल नष्ट वस्तु को फ्रीज करता है (आप इसे अपडेट नहीं कर सकते हैं)। यह नष्ट कार्रवाई की स्थिति वापस नहीं करता है।

हालांकि आम तौर पर वस्तु को नष्ट करना हमेशा सफल होना चाहिए, आप ActiveRecordError सुन सकते हैं। उदाहरण के लिए Optimistic Locking रिकॉर्ड नष्ट होने पर ActiveRecord :: StaleObjectError को बढ़ा सकता है।

1

Ruby on Rails API documentation के अनुसार, destroy विधि आपके द्वारा नष्ट की गई वस्तु को वापस कर देगी, लेकिन एक जमे हुए राज्य में।

जब कोई ऑब्जेक्ट जमे हुए होता है, तो ऑब्जेक्ट में कोई भी परिवर्तन नहीं किया जाना चाहिए क्योंकि यह अब जारी नहीं रह सकता है।

आप देख सकते हैं कि object.destroyed? का उपयोग करके कोई वस्तु नष्ट हो गई है या नहीं।

3

जैसा कि ऊपर वर्णित कुछ लोगों के रूप में, destroy एक बूलियन मान वापस नहीं करता है, बल्कि यह एक जमे हुए ऑब्जेक्ट देता है। और इसके अतिरिक्त यह उस इंस्टेंस ऑब्जेक्ट की स्थिति को अपडेट करता है जिसे आप इसे कॉल करते हैं। यहां बताया गया है कि मैं नियंत्रक कैसे लिखता हूं:

@widget_part.destroy 

if @widget_part.destroyed? 
    flash[:success] = 'The part is destroyed' 
else 
    flash[:error] = 'Failed to destroy' 
end 
संबंधित मुद्दे