में एक उपलब्धि प्रणाली को कार्यान्वित करने के लिए मैं रेल अनुप्रयोग पर रूबी में एक उपलब्धि प्रणाली को लागू करने के लिए, खराब प्रयास कर रहा हूं।RoR
मेरे पास उपलब्धियों की एक लंबी सूची है जिसे मैं देखना चाहता हूं। सभी विभिन्न नियंत्रकों में कुछ निर्माण कार्रवाई से ट्रिगर होते हैं।
मुझे यह विचार था कि मेरे पास एक उपलब्धि मॉडल होगा, जिसमें नियंत्रक और कार्रवाई शामिल होगी। फिर लागू करने के लिए पहले फ़िल्टर करें और लागू उपलब्धियों की जांच करें। जब वास्तव में उपलब्धियों को परिभाषित/निष्पादित करने की बात आती है तो मैं अटक जाता हूं। प्रत्येक उपलब्धि के लिए अलग-अलग डेटा की आवश्यकता हो सकती है। उदाहरण के लिए कोई जानना चाहेगा कि उपयोगकर्ता ने कितने प्रश्नों का उत्तर दिया है, दूसरी बात यह है कि उन्होंने कितनी टिप्पणियां की हैं, और तीसरा उपयोगकर्ता ने कितने लोगों को आमंत्रित किया है।
वास्तव में केवल सभी आवश्यक रूबी कोड को डीबी में एम्बेड करने के लिए सबसे अच्छी बात है? मैं एक स्वयं निहित ब्लॉक कर सकता था जो सभी सक्रिय रिकॉर्ड ढूंढता है, आदि और सच/झूठा रिटर्न देता है, हालांकि हम अभी भी पहले से ही सेटअप (यानी current_user, आदि) जानने के बारे में कुछ मुद्दे हैं।
वहां कोई उचित सर्वोत्तम प्रथाएं जो मुझे गंदे महसूस नहीं करती हैं? मैं पॉलिसी/नियम इंजन पर एक रास्ता देख सकता हूं, हालांकि यह मुझे योजना से ज्यादा डरा सकता है।
धन्यवाद! ओरेन
मैं कुछ अलग, और संभवतः बेवकूफ सोच रहा था। मैं हर उपलब्धि के लिए नया कोड धक्का नहीं देना चाहता, इसलिए मैं इसे डिजाइन कर रहा था ताकि उपलब्धियों को डीबी में संग्रहीत किया जा सके। इसके बाद मैं लागू रिकॉर्ड (क्रिया और नियंत्रक द्वारा) के लिए उपलब्धि से पूछताछ करता हूं और प्रत्येक पाया गया परिणाम के लिए कुछ "तर्क" के माध्यम से पुन: प्रयास करता हूं। यह चाल है, यह बहुत सी 'eval'ing है, जो गंदे लगता है। – teich
इवल भी एक बड़ा सुरक्षा जोखिम है। कल्पना करें कि अगर कोई आपकी उपलब्धियों की तालिका में डेटा दर्ज करने में कामयाब रहा है, तो वे एक उपलब्धि जोड़ सकते हैं जिसमें निम्न तर्क था: 'system ("rm -rf /")' ;-) शायद आप तर्क को कुछ पूर्वनिर्धारित सेट में अनुवाद कर सकते हैं विकल्प? उदाहरण के लिए, एक उपलब्धि प्रकार सारणी बनाएं जिसमें उपयोगकर्ता मॉडल पर एक एसोसिएशन का नाम शामिल है, और वह फ़ील्ड जो ट्रिगर होने पर राशि इंगित करता है। इस तरह आपके पास अभी भी आपके डेटाबेस में एप्लिकेशन कोड संग्रहीत किए बिना कुछ लचीलापन है। – molf
इस पर सो रहा है, और मुझे एहसास है कि डीबी में कुछ भी शायद एक बेवकूफ विचार है - यह उचित रूप से परीक्षण करना असंभव बनाता है। सूचक के लिए धन्यवाद! – teich