मेरा प्रश्न: क्या मुझे अपना खुद का मॉडल संस्करण रोल करना चाहिए या संस्करण संस्करणों में से एक का उपयोग करना चाहिए जो पहले से ही बाहर है? अगर मुझे एक मणि का उपयोग करना चाहिए, तो इस एप्लिकेशन के लिए कौन सा सबसे अच्छा लगता है?रेल 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 है। मुझे सभी तालिकाओं को अपडेट करने और सही ढंग से तालिकाओं में शामिल होने के लिए वास्तव में सावधान रहना होगा। (यह रत्नों में से एक के साथ भी एक मुद्दा हो सकता है)।
- चूंकि मैं रिपोर्टिंग के लिए इस संस्करण डेटा का उपयोग कर रहा हूं, इसलिए मैं प्रदर्शन समस्याओं के बारे में चिंतित हूं। पार्सिंग हैश कम्प्यूटेशनल रूप से महंगा लगता है, जबकि इंडेक्स के साथ फ्लैट टेबल पर भरोसा करना बहुत कुशल लगता है।
- दोनों रत्न ट्रैकिंग के लिए संस्करण इतिहास रखने के लिए और वास्तव में रिपोर्टिंग उद्देश्यों के लिए ऐतिहासिक जानकारी को बनाए रखने के लिए तैयार नहीं हैं।
यह महत्वपूर्ण लगता है क्योंकि जो कुछ भी मैं तय करता हूं, मैं मूल रूप से अटक जाऊंगा। मुझे नहीं लगता कि एक विधि से दूसरे तरीके से स्विच करना आसान होगा।
रिचर्ड, यह एक अच्छा जवाब है। अगर किसी के पास कुछ और बिंदु है, तो मुझे इसे पसंदीदा जवाब देने पर थोड़ा सा रोकना होगा, लेकिन मुझे आपकी तर्क पसंद है और इससे सहमत हैं। आपकी विचारशील प्रतिक्रिया के लिए धन्यवाद! – JoshDoody
क्या आप अपना खुद का रोलिंग समाप्त कर चुके हैं? –
एलेक्स, मैंने अपना खुद का रोलिंग समाप्त कर दिया। यह बहुत मुश्किल था, लेकिन मुझे लगता है कि यह शायद सबसे अच्छा था। मुझे ऐतिहासिक डेटा के साथ कुछ रिपोर्टिंग और विश्लेषण करने की आवश्यकता होगी, और यह महत्वपूर्ण है कि रिपोर्टिंग करने के लिए मेरे पास मूल ऑब्जेक्ट्स तक पहुंच हो। नकारात्मकता यह है कि मैंने अपने समाधान को अधिक इंजीनियर किया हो (और इसलिए इसे बहुत मुश्किल बना दिया गया)। मुझे नहीं पता कि यह सच है जब तक कि मैं वास्तव में अपने पैसों के माध्यम से ऐप चलाने शुरू नहीं करता। – JoshDoody