5

मेरा प्रश्न: क्या मुझे अपना खुद का मॉडल संस्करण रोल करना चाहिए या संस्करण संस्करणों में से एक का उपयोग करना चाहिए जो पहले से ही बाहर है? अगर मुझे एक मणि का उपयोग करना चाहिए, तो इस एप्लिकेशन के लिए कौन सा सबसे अच्छा लगता है?रेल 3.2 ऐप - क्या मुझे एक वर्जनिंग मणि (paper_trail या vestal_versions) का उपयोग करना चाहिए या इसे मैन्युअल रूप से संभालना चाहिए?

मेरे एप्लिकेशन के बारे में जानकारी

मेरा ऐप एक सरल चेकलिस्ट ऐप है। चेकलिस्ट और नौकरियां हैं, और मैं प्रतिक्रियाओं और सबमिशन के साथ उपयोगकर्ता प्रतिक्रियाओं को ट्रैक करता हूं। प्रतिक्रिया मुझे बताती है कि उपयोग ने क्या कहा ("हो गया", एक नोट के साथ "हमें और अधिक मोप्स चाहिए।") और सबमिशन मुझे बताता है कि जब उस विशेष चेकलिस्ट को भर दिया गया था (क्योंकि दिए गए किसी भी सबमिशन और प्रतिक्रियाओं के सेट हो सकते हैं चेकलिस्ट)। यदि मदद करता है तो मैं नीचे अपने संगठन दिखाऊंगा।

#checklist.rb 
class Checklist < ActiveRecord::Base 
    has_many :jobs, :through => :checklists_jobs 
    has_many :submissions 
end 

#job.rb 
class Job < ActiveRecord::Base 
    has_many :checklists, :through => :checklists_jobs 
    has_many :responses 
end 

#response.rb 
class Response < ActiveRecord::Base 
    belongs_to :job 
    belongs_to :submission 
    belongs_to :user 
end 

#submission.rb 
class Submission < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :checklist 
    has_many :responses 
end 

क्या मैं संस्करण के साथ क्या करने की कोशिश कर रहा हूँ

मुझे क्या करना चाहते हैं जाँच सूची पर नौकरियों के लिए रिकॉर्ड उपयोगकर्ताओं की प्रतिक्रियाओं है। लेकिन मैं यह सुनिश्चित करना चाहता हूं कि यदि चेकलिस्ट बदलती है तो मैं मूल चेकलिस्ट (प्रतिक्रिया जानकारी के साथ) पुन: पेश कर सकता हूं। उदाहरण के लिए, मैं यह सुनिश्चित करना चाहता हूं कि मैं चेकलिस्ट के पिछले सभी संस्करणों के लिए इस प्रश्न का उत्तर दे सकता हूं:

"चेकलिस्ट किस तरह दिखती थी, और तीन मंगलवार को प्रतिक्रिया क्या थी?"

यदि मैं चेकलिस्ट या उसकी किसी भी नौकरियों को बदलता हूं तो मैं उस प्रश्न का उत्तर खोना नहीं चाहता हूं।

मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका वर्जनिंग (नौकरियों और चेकलिस्ट के लिए) का उपयोग करना है। उदाहरण के लिए, यदि किसी व्यवस्थापक द्वारा कोई जॉब बदल दिया गया है (नाम या विवरण), तो मैं मौजूदा नौकरी को अपडेट नहीं करता हूं, लेकिन एक नया संस्करण बनाता हूं और पुराने संस्करण को बरकरार रखता हूं। तब मैं पुरानी चीजें जगह पर छोड़ देता हूं और चेकलिस्ट को नौकरी के नए संस्करण में इंगित करता हूं।

क्या मुझे एक मणि का उपयोग करना चाहिए या अपना खुद का रोल करना चाहिए?

मैं यह तय करने का प्रयास कर रहा हूं कि मुझे अपना खुद का रोल करना चाहिए (संस्करण को बढ़ाने के लिए कोड लिखें, संस्करण में सब कुछ इंगित करें, और पिछले संस्करण को संरक्षित करें) या मौजूदा समाधान का उपयोग करें। दो सबसे अच्छे समाधान पेपर_ट्रिल और vestal_versions प्रतीत होते हैं। मेरे पास दो से अधिक लिंक पोस्ट करने के लिए पर्याप्त प्रतिष्ठा अंक नहीं हैं, इसलिए मैं प्रत्येक मणि के रेलस्कास्ट से लिंक करूंगा (जो आपको चाहें तो आप खुद को मणि पर ले जाएंगे)। Railscast 255 Undo with paper_trail और Railscast 177 Model Versioning - 177 vestal_versions का उपयोग करता है। मेरे अपने रोलिंग को

सकारात्मक:

  • मैं पुनर्निर्माण जाँच सूची और अपनी प्रतिक्रिया से सभी ऐतिहासिक डेटा पर रिपोर्ट करनी होगी। यह ऐप की मुख्य विशेषता है। ऐसा लगता है कि यह उल्लेख किया गया रत्नों के साथ मुश्किल होगा।
  • मैं संस्करणों के समूहों पर की रिपोर्ट करने में सक्षम हूं ("मैं इस नौकरी के किसी भी संस्करण के लिए सभी प्रतिक्रियाएं देखना चाहता हूं")। यह इस तरह से आसान लगता है।मेरे अपने रोलिंग को

विपक्ष: संघों के माध्यम से:

  • यह मुश्किल हो रहा है क्योंकि मैं कई has_many है। मुझे सभी तालिकाओं को अपडेट करने और सही ढंग से तालिकाओं में शामिल होने के लिए वास्तव में सावधान रहना होगा। (यह रत्नों में से एक के साथ भी एक मुद्दा हो सकता है)।
  • चूंकि मैं रिपोर्टिंग के लिए इस संस्करण डेटा का उपयोग कर रहा हूं, इसलिए मैं प्रदर्शन समस्याओं के बारे में चिंतित हूं। पार्सिंग हैश कम्प्यूटेशनल रूप से महंगा लगता है, जबकि इंडेक्स के साथ फ्लैट टेबल पर भरोसा करना बहुत कुशल लगता है।
  • दोनों रत्न ट्रैकिंग के लिए संस्करण इतिहास रखने के लिए और वास्तव में रिपोर्टिंग उद्देश्यों के लिए ऐतिहासिक जानकारी को बनाए रखने के लिए तैयार नहीं हैं।

यह महत्वपूर्ण लगता है क्योंकि जो कुछ भी मैं तय करता हूं, मैं मूल रूप से अटक जाऊंगा। मुझे नहीं लगता कि एक विधि से दूसरे तरीके से स्विच करना आसान होगा।

उत्तर

-3

मेरा अनुभव यह है कि जब आप किसी तीसरे पक्ष के समाधान का उपयोग करके अपना स्वयं का समाधान बनाते हुए सवाल पूछते हैं तो जवाब लगभग हमेशा 'अपना खुद का रोल' होता है। न केवल आप वास्तव में क्या आप चाहते हैं कार्यक्षमता के संदर्भ में, आप के लिए कुछ अन्य डेवलपर के लिए कृतज्ञ नहीं कर रहे हैं बनाने के कर सकते हैं:,

  1. फिक्स उनके कीड़े
  2. नवीनतम रेल अद्यतन/गहरे लाल रंग का अद्यतन समर्थन आदि
  3. सूक्ष्म तरीकों से अपने ऐप के साथ किसी भी तरह से संघर्ष नहीं है जिसे आप संबोधित नहीं कर सकते (निर्भर रत्न के विभिन्न संस्करणों की आवश्यकता है)।

मैं कहता हूं कि यदि आपके पास क्षमता है तो आपको समय बिताना चाहिए और आप जो चाहते हैं उसे लिखना चाहिए। यह अब से दो साल का बड़ा भुगतान करेगा।

+0

रिचर्ड, यह एक अच्छा जवाब है। अगर किसी के पास कुछ और बिंदु है, तो मुझे इसे पसंदीदा जवाब देने पर थोड़ा सा रोकना होगा, लेकिन मुझे आपकी तर्क पसंद है और इससे सहमत हैं। आपकी विचारशील प्रतिक्रिया के लिए धन्यवाद! – JoshDoody

+0

क्या आप अपना खुद का रोलिंग समाप्त कर चुके हैं? –

+0

एलेक्स, मैंने अपना खुद का रोलिंग समाप्त कर दिया। यह बहुत मुश्किल था, लेकिन मुझे लगता है कि यह शायद सबसे अच्छा था। मुझे ऐतिहासिक डेटा के साथ कुछ रिपोर्टिंग और विश्लेषण करने की आवश्यकता होगी, और यह महत्वपूर्ण है कि रिपोर्टिंग करने के लिए मेरे पास मूल ऑब्जेक्ट्स तक पहुंच हो। नकारात्मकता यह है कि मैंने अपने समाधान को अधिक इंजीनियर किया हो (और इसलिए इसे बहुत मुश्किल बना दिया गया)। मुझे नहीं पता कि यह सच है जब तक कि मैं वास्तव में अपने पैसों के माध्यम से ऐप चलाने शुरू नहीं करता। – JoshDoody

44

पेपरट्रेल का उपयोग करें, और अपना खुद का समाधान न रोल करें। मैं रिचर्ड के जवाब से असहमत हूं। पेपरट्रिल एक बहुत सक्रिय परियोजना है, जिसमें कई लोग बग फिक्स में योगदान देते हैं, नवीनतम रेल और रूबी संस्करणों का समर्थन करते हैं, और मणि संघर्षों को संभालने में मदद करते हैं।

यदि आपको पेपरट्राइल कुछ करने का तरीका पसंद नहीं है, तो आपको इसे फोर्क करना चाहिए और उस व्यवहार को बदलना चाहिए। यदि यह एक सामान्य सुधार है, तो पुल अनुरोध सबमिट करें ताकि हम सभी आपके काम से लाभ उठा सकें। स्क्रैच से इसे फिर से लिखना न करें, क्योंकि आपके पास बग और एज-केस के हिंडसाइट नहीं हैं जो पेपरट्रिल कमेटर्स पहले ही हो चुके हैं।

+5

इस भावना से सहमत होना चाहिए। जब आप कोड के घंटों तक कम होते हैं, तो इसे अपडेट करने के बिना कार्यक्षमता प्राप्त करना एक सकारात्मक है। लाइब्रेरी को केवल सीमांत लाभ के लिए बनाए रखने के लिए आपको अतिरिक्त घंटे खर्च नहीं करना पड़ता है। यह रूबी है, आपको थोड़ा सा कार्यक्षमता जोड़ना आसान है (और उस पर परीक्षण चलाएं), और अपस्ट्रीम को दबाएं, या अपने एप्लिकेशन के खिलाफ खुले बंद सिद्धांतों के साथ स्थानीय रखें। – tadiou

+0

प्रदर्शन के साथ यह मणि कैसे है? – Sid

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

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