2011-03-08 14 views
6

संशोधित करना मैं एक कोर्स नामांकन मॉडल बना रहा हूं और जब भी कोई उपयोगकर्ता कोर्स देखता है, तो मैं वर्तमान टाइमस्टैम्प के साथ डेटाबेस को अपडेट करना चाहता हूं। क्या मुझे मौजूदा अपडेटेड फ़ील्ड को अपडेट करना चाहिए या मॉडल के लिए एक अलग क्षेत्र बनाना चाहिए?रेल 3 अपडेटिंग_एट

उत्तर

5

मैं एक अलग फ़ील्ड बनाउंगा। updated_at वास्तव में अपने उद्देश्य को सही ढंग से संवाद नहीं करता है। last_viewed_at जैसे कुछ अधिक उपयुक्त होंगे। बेशक, updated_at अपडेट किया जाएगा जब आप last_viewed_at अपडेट करते हैं, तो आपको ओवरराइड करने का एक तरीका ढूंढना होगा, जब आप जो करना चाहते हैं वह उस कॉलम को अपडेट करें।

आप self.record_timestamps को before_filter में झूठी करने के लिए अस्थायी रूप से टाइमस्टैम्प अपडेट अक्षम कर सकते हैं और फिर इसे after_filter में पुन: सक्षम कर सकते हैं।

+0

मुझे लगता है कि वहाँ एक बेहतर तरीका है, लेकिन चेक बाहर आप एक टॉगल 'CourseEnrollment.record_timestamps = FALSE' रिकॉर्ड अद्यतन करने से पहले कर सकते हैं। – Jordan

+1

मैं भी अतिरिक्त कॉलम के साथ जाऊंगा। अद्यतन टाइमस्टैम्प को संशोधित करने के लिए, एक अतिरिक्त मॉडल विधि जोड़ें, जिसे शायद "देखा गया" कहा जा सके, और वहां एक कॉल डालें: "update_attribute: last_viewed_at, Time.now"। यह सिर्फ इस क्षेत्र को अपडेट करेगा। रिकॉर्ड को दिखाते हुए आपके नियंत्रकों में, बस "रिकॉर्ड करें। देखा गया!" फिर। – hurikhan77

0

यदि मैं सही ढंग से समझता हूं तो आप पाठ्यक्रम नामांकन में एक कॉलम बनाना चाहते हैं जिसे last_viewed_at कहा जाता है जिसे जब भी कोई उपयोगकर्ता रिकर्ड करता है सेट किया जाता है?

यदि आप ऐसा करना चाहते हैं, तो अपने पाठ्यक्रम नामांकन के लिए last_viewed_at कॉलम जोड़ने के लिए माइग्रेशन बनाएं (रेल अपडेटेड_ट फ़ील्ड को ओवरराइट न करें)। फिर या तो अपने नियंत्रक तर्क में या मॉडल स्तर में आप उस फ़ील्ड को अपडेट कर सकते हैं। यह इस बात पर निर्भर करता है कि आप इसे कैसे कार्यान्वित करना चाहते हैं।