2008-10-14 19 views
15

मुझे लगता है कि यह महत्वपूर्ण है करने के लिए एक आला जीमेल "पूर्ववत" विधि जब बजाय रिकॉर्ड को नष्ट करने एक कष्टप्रद पॉपअप का कहना है कि, "आपको यकीन है?" प्रदर्शित।रेल में जीमेल शैली "पूर्ववत करें" को लागू करने का सबसे अच्छा तरीका क्या है?

तरह से है कि मैं इस मॉडल है जो टाइमस्टैंप हो जाता है जब विधि को नष्ट वापस लौटने के लिए

def destroy 
    @foo = Foo.find(params[:id]) 
    @foo.update_attribute(:deleted_at, Time.now) 
    ... 
end 

कहा जाता है में एक "deleted_at" टाइमस्टैम्प स्तंभ है क्रियान्वित किया है/ पूर्ववत रहा हूँ जब मैं खोज विधि कॉल सिर्फ शून्य

def revert 
    @foo = Foo.find(params[:id]) 
    @foo.update_attribute(:deleted_at, nil) 
    ... 
end 

को उसी स्तंभ सेट मैं सिर्फ एक शर्त बंद फिल्टर करने के लिए जोड़ना होगा कम महत्वपूर्ण चीज़ें "हटाए गए"। शायद कुछ समय बाद "हटाए गए" फूओ को वास्तव में नष्ट करने के लिए एक क्रॉन या पृष्ठभूमि कार्य सेट करें।

मेरे लिए काम करता है और कार्यान्वित करने में आसान है, लेकिन मुझे इस बात को लेकर उत्सुकता है कि इस सुविधा को लागू करने का कोई बेहतर तरीका है या नहीं? शायद एक प्लगइन या मणि है जो यह प्रदान करता है कि मुझे नहीं पता?

+0

क्या आपको वाकई परवाह होने पर परवाह है? एक झंडा पर्याप्त नहीं है? –

+4

हाँ, मुझे वास्तव में परवाह नहीं है जब इसे अभी हटा दिया गया था लेकिन वह ज्ञान लाइन के नीचे उपयोगी हो सकता है। वैसे भी मुझे लगता है कि टाइमस्टैम्प एक अच्छा झंडा बनाता है। – JasonOng

+1

मैं सामान्य भावना से सहमत हूं।हालांकि, पूर्व-खाली करने की ज़रूरतों की एक संभावित समस्या यह है कि यह अन्य डेवलपर्स को यह पता लगाने में लगा सकता है कि वह (टाइमस्टैम्प) जानकारी वर्तमान में उपयोग की जाती है। जब इसे वास्तव में कहीं भी उपयोग नहीं किया जाता है, तो यह एक ढीले धागे का प्रतिनिधित्व करता है, जो अक्सर निराशाजनक और अनियमित के लिए समय लेने वाला होता है। – Magne

उत्तर

4

वास्तव में कुछ प्लगइन्स हैं जो Agile Web Development पर पाए जा सकते हैं।

  1. Acts as Paranoid:

    हैं प्लगइन के लिए लिंक और सारांश जो आपके वर्णन मिलते हुए लगते हैं। "पागल" अपने सक्रिय रिकॉर्ड्स बनाओ उन्हें हटाने से पंक्ति को हटाया नहीं जाता है, लेकिन हटाए गए_एट फ़ील्ड को सेट किया जाता है। हटाए गए रिकॉर्ड्स को छोड़ने के लिए खोजें ओवरलोडेड है।

  2. Acts as soft deletable: ActiveRecord मॉडल को नरम हटाने की क्षमता प्रदान करता है।
+0

अधिनियमों की तरह लगता है क्योंकि Paranoid को ActiveRecord के भविष्य के संस्करणों के साथ कुछ समस्याएं हो सकती हैं क्योंकि यह खोज विधि को ओवरराइड करता है। सॉफ़्ट डिलीटेबल के रूप में अधिनियम अच्छा दिखता है। मैं बस सोच रहा हूं कि हटाए गए_टेबल सिंक से बाहर हो गया है या नहीं, मैं इसे पुनर्वित्त कैसे करूं? क्या आपने इनमें से किसी भी का उपयोग किया है? – JasonOng

+0

नहीं, लेकिन नरम हटाने योग्य के विवरण में यह कहता है कि इसमें सिंक्रनाइज़ेशन रखने के लिए इसमें सहायक तरीके हैं – Tilendor

+0

दोनों की एक संक्षिप्त समीक्षा यह प्रतीत होती है जैसे कि प्रयुक्त प्रयुक्त विधि के लिए नरम हटाने योग्य बेहतर विकल्प होगा और तथ्य यह है कि यह बेहतर बनाए रखा प्रतीत होता है। –

0

एक फ़ाइल here है जो आपको आवश्यकता होती है, ऐसा लगता है, लेकिन व्यक्तिगत रूप से मुझे लगता है कि वहां कुछ ऐसा होना चाहिए जो स्वचालित रूप से हटाए गए रिकॉर्ड्स को फ़िल्टर करता है जब तक आप उन्हें विशेष रूप से शामिल नहीं करते। इस तरह वे वास्तव में तब तक हटाए जाएंगे जब तक कि आप एक पैरामीटर या नामित स्कोप शामिल न करें जो उन्हें फिर से शामिल करता हो।

दुर्भाग्यवश, मैंने एक नहीं लिखा है और अतिरिक्त समय सीमित है, लेकिन यह मुश्किल नहीं होना चाहिए, है ना?

-1

जिम्मेदारी श्रृंखला पैटर्न

class Action 
{ 
    Perform(context); 
    Undo(context); 
} 
+2

यह बहुत अस्पष्ट है और मुझे वास्तव में पूर्ववत करने के तरीके पर कोई विचार नहीं देता है। संदर्भ क्या है? यह डेटाबेस के साथ कैसे बातचीत करता है? – Tilendor

0

आप एक अलग संग्रह (या तालिका, या जो कुछ भी) में हटाए गए आइटम स्थानांतरित कर सकते हैं - तो कुछ भी है कि मूल सूची में लग रहा है कि इसे नष्ट कर दिया गया है देखेंगे, और आप कर सकते हैं जब यह सुविधाजनक हो तो नई सूची से निपटें।

0

PaperTrail यह अच्छी तरह से करता है। इस पर एक अच्छा Railscast है, हालांकि यह अब थोड़ा पुराना है। मुझे पता है कि इस सवाल को थोड़ी देर पहले पूछा गया था, लेकिन मैंने जिज्ञासा से इसे ठोकर खाया और सोचा कि मुझे ऐसा करने का एक अच्छा तरीका तय करना चाहिए।