2011-01-17 7 views
65

मेरे पास एक ActiveRecord मॉडल है जो truevalid? (और .errors खाली है) से लौट रहा है, लेकिन save() से false लौटा रहा है। यदि मॉडल इंस्टेंस मान्य है, तो मैं कैसे पता लगा सकता हूं कि सहेजने में विफलता क्या हो रही है?रेल में, मैं कैसे पता लगा सकता हूं कि एक .save() विफल होने के कारण, सत्यापन त्रुटियों के अलावा?

+7

मुझे कुछ हफ्ते पहले यह समस्या थी। कुछ रिफैक्टरिंग ने पहले_सव फ़ंक्शन को हर समय झूठा लौटा दिया था, जिससे विफल होने का कारण बनता है। –

+1

@ जेफ - धन्यवाद, यह पता चला है कि एक था: first_save विधि झूठी लौट रही है। तुम्हे कैसे पता चला? क्या यह सिर्फ कोड निरीक्षण था? – kdt

+0

यह कोड निरीक्षण था, और संस्करण नियंत्रण के खिलाफ diffs कर रहा था। –

उत्तर

38

अपने सभी कॉलबैक की जाँच करें।

मुझे इस तरह की समस्या थी जहां मेरे पास था और "after_validate" विधि जो मॉडल में बदलावों के एक समूह के बाद विफल रही थी। मॉडल मान्य था लेकिन "after_validate" झूठा लौट रहा था, इसलिए यदि मैंने model.valid का उपयोग किया तो यह सच कहा गया, लेकिन फिर अगर मैंने सहेजा तो मुझे सत्यापन त्रुटियां मिलीं (बाद में वैध कॉलबैक से गुजरती हैं)। वह अजीब था।

एप्लिकेशन ट्रेस को देखें और आपको यह देखने में सक्षम होना चाहिए कि कोड की कौन सी पंक्ति अपवाद उठा रही है।

+2

जेफ की टिप्पणी के अनुसार, समस्या पहले से सहेजा गया कॉलबैक झूठी लौट रहा है। – kdt

+2

@kdt - यह वही है जो मेरी समस्या थी। मैंने इसके बारे में सोचा नहीं था क्योंकि पहले_सेव सिर्फ एक संपत्ति सेट करने के लिए था, लेकिन क्योंकि यह इसे झूठे मूल्य पर स्थापित कर रहा था, जिसे पूरी तरह से वापस कर दिया गया था और जिससे सहेजने से चुपचाप विफल हो गया। चमकदार तरफ, अब मेरे पास लाइन को जोड़कर इस कोड को ठीक करने का विकल्प है "अरे! यह मेरा नकली पैर है!" # मानो या नहीं, यह महत्वपूर्ण है। ऐसा नहीं है कि मैं ऐसा करूँगा।;) –

+2

एक अच्छा एक वास्तविक वापसी मूल्य सुनिश्चित करने के लिए रास्ता 'true.tap {do_something}' –

81

बैंग संस्करण save! (अंत में विस्मयादिबोधक चिह्न के साथ) का उपयोग करने और परिणामी त्रुटि का निरीक्षण करने का प्रयास करें।

+6

+1 त्वरित और गंदे लेकिन यह हमेशा होता है जो मैं करता हूं – DanSingerman

+3

बचाओ! बस एक रिकॉर्ड नॉटस्वेड फेंक रहा है (जब मैं अपवाद के मैसेज को प्रिंट करता हूं तो मुझे अपवाद वर्ग का नाम मिलता है)। क्या कहीं और मुझे और विस्तार की तलाश करनी चाहिए? – kdt

+0

यदि आप रेल विकास मोड में हैं, तो इसे स्टैक ट्रेस के साथ त्रुटि का पूरा विवरण प्रिंट करना चाहिए। किसी भी सुराग के लिए एक नज़र डालें और/या इसे यहां पोस्ट करें। –

69

@user.save (उदाहरण के लिए) देता है, तो false, तो बस यह सब त्रुटियों प्राप्त करने के लिए चलाएँ:

@user.errors.full_messages 
+7

जैसा कि मैंने प्रश्न में उल्लेख किया है,। वैध? सत्य है - यानी कोई नहीं है सत्यापन त्रुटियों। मैंने यह जांच लिया है .errors एक खाली सूची भी लौट रहा है (मैंने उस बिंदु को इंगित करने के लिए प्रश्न अपडेट किया है) – kdt

2

हां, मुझे यकीन है कि मैं अपने सभी before_ में सच वापसी करके इस समस्या का समाधान हो * कॉलबैक तो यह काम करना शुरू :)

0

समस्या मैं था कि मैं मॉडल के लिए मान्यता जोड़ने के लिए भूल गया था।

class ContactGroup < ActiveRecord::Base 
    validates_presence_of :name 
end 
संबंधित मुद्दे