2012-07-26 11 views
5

मैं एक रेल 3.2 अनुप्रयोग के लिए will_paginate उपयोग करने के लिए कोशिश कर रहा हूँ और मैं कहीं भी क्या होता है जब किसी को है, जबकि DB में डेटा बदल गया है पेजिंग है के लिए किसी भी संदर्भ नहीं देखा था । अधिक विशेष रूप से, नए रिकॉर्ड जोड़े गए हैं।रेल will_paginate और ajax, पेजिंग जबकि डीबी तालिका में परिवर्तन

मैं कुछ यहाँ याद आ रही हो सकता है, लेकिन अगर मैं यह कैसे काम करता हो, will_paginate बस डीबी में रिकॉर्ड गिना जाता है। कहें कि मैं एक समय में 5 रिकॉर्ड वाले एक पृष्ठ को लोड करता हूं और उन्हें नवीनतम सबसे पहले आदेश देना चाहता हूं। कोई उपयोगकर्ता पृष्ठ लोड करता है और पृष्ठ 1 पर दिखाए गए रिकॉर्ड 6-10 (उस समय के नवीनतम रिकॉर्ड) प्राप्त करता है। फिर, कोई तालिका, आईडी = 11 पर एक और रिकॉर्ड डालता है। उसके बाद, पहला उपयोगकर्ता पृष्ठ 2 पर जाने के लिए क्लिक करता है लेकिन अब पृष्ठ 2 रिकॉर्ड 2-6 देता है। तो उपयोगकर्ता को दोनों पृष्ठों में आईडी = 6 मिला।

यह समस्या है कि बुरा नहीं लग रहा है, लेकिन यह वास्तव में बुरा है जैसा कि यहाँ दिखाया आप एक अनंत स्क्रॉल के लिए will_paginate पेजिंग उपयोग करना चाहते हैं: http://railscasts.com/episodes/114-endless-page

मैं पहली बार पृष्ठ लोड के समय स्टाम्प जोड़ने के बारे में सोचा और इसे डुप्लिकेट न प्राप्त करने के लिए पहले मौजूद रिकॉर्ड्स पर फ़िल्टर करने के लिए लगातार AJAX कॉल को पास करें।

क्या इसे संभालने के लिए कुछ बेहतरीन अभ्यास तरीका है?

+0

मैंने पहले पृष्ठ लोड के समय मौजूद डेटा प्राप्त करने के लिए एक टाइमस्टैम्प का उपयोग किया था। – Oded

+0

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

उत्तर

1

टाइमस्टैम्प जाँच की आपका समाधान काम करता है, तो रिकॉर्ड ही जुड़ जाते हैं। डेटा का अगला सेट प्राप्त करने के लिए लौटे गए सबसे पुराने रिकॉर्ड के टाइमस्टैम्प का उपयोग करना एक विकल्प है।

इस तरह, यदि एक रिकार्ड नष्ट कर दिया है, तो कोई रिकॉर्ड नहीं छोड़ दिया जाएगा।

लौटे गए सबसे पुराने रिकॉर्ड के टाइमस्टैम्प का उपयोग करना समय के समय में फायदेमंद है, क्योंकि डेटाबेस को 101 वें रिकॉर्ड लाने के लिए 100 रिकॉर्ड गिनने की आवश्यकता नहीं है, यह एक निश्चित समय से पहले रिकॉर्ड को पुराना आसान कर सकता है (यदि आपका बनाया गया_at कॉलम अनुक्रमित है - बाइनरी खोज की अनुमति देता है तो यह बहुत तेज़ है)।

+0

हाय @ronalchn क्या आप कोड का एक उदाहरण लिख सकते हैं जिसे हम और समझ सकते हैं ... – medBo

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