2009-07-07 11 views
30

मेरे पास एक प्रक्रिया है जो ActiveRecord मॉडल के समूह के माध्यम से पुनरावृत्त करती है, कुछ प्रसंस्करण करता है, और मॉडलों को फिर से सहेजता है। अक्सर, प्रसंस्करण के परिणामस्वरूप गुणों में कोई परिवर्तन नहीं होता है और इसलिए updated_at कॉलम कभी नहीं बदलता है (भले ही सहेजने के लिए कहा जाता है)।रेल में 2.30 अपडेट किया गया कॉलम 2.3.2

मैं आंशिक अपडेट अक्षम नहीं करना चाहता (सामान्य रूप से, वे उपयोगी हैं)। मेरा अनुमान है कि यह है कि मेरे पास दो विकल्प हैं:

  1. मॉडल के लिए एक अलग टाइमस्टैम्प स्तंभ जोड़ें (जैसे कि, 'processed_at') और यह अपने आप का प्रबंधन है, हालांकि यह एक सा बेकार/बेमानी लगता है।
  2. या किसी भी तरह updated_at विशेषता के प्रबंधन को ओवरराइड करें?

मैंने सुना है कि रेल 3 में 'स्पर्श' विधि होगी जो मैं वही करूँगा जो मैं ढूंढ रहा हूं।

कोई विचार/विकल्प/राय?

उत्तर

52

असल touch विधि रेल 2.3.x में पहले से ही है, तो आप बस कर सकते हैं:

model.touch 

updated_at स्तंभ को अपडेट करें। वैकल्पिक रूप से, वर्तमान दिनांक और समय उपयोग के साथ कुछ अन्य स्तंभ अद्यतन करने के लिए:

model.touch(:column_name) 
+0

वाह! आप सही हे। सबक सीखा, ब्लॉग पोस्ट में जो कुछ भी आपने पढ़ा है उस पर विश्वास न करें (http://ryandaigle.com/articles/2009/4/20/what-s-new-in-edge-rails- टचिंग), बस सीधे जाएं स्रोत (http://github.com/rails/rails/blob/0d3c5f0a822cd1b6029b5f619774b7794a94f370/activerecord/lib/active_record/timestamp.rb#L27) – ideasasylum

+0

मुझे लगता है कि डीएचएच ने ट्विटर पर इसका उल्लेख किया होगा - इस तरह मैं इसके बारे में जानता था। –

+0

Grrr ... ऐसा लगता है कि टच समर्थन अभी 2.3.2 रिलीज से चूक गया है और केवल 2.3-STABLE शाखा में है। कोई 2.3.3 मील का पत्थर नहीं है लेकिन 2.3.4 को 18 जुलाई के रूप में सूचीबद्ध किया गया है। मुझे लगता है मुझे बस इंतजार करना होगा :-( – ideasasylum

1

अब जब कि 2.3.x लाइन आते हैं और चला गया है, एक और अधिक निश्चित जवाब है कि स्पर्श 2.3.8 तक ActiveRecord में आने से पहले नहीं किया है । इसलिए, रेलवे 2.3.2 का उपयोग करने वाले किसी भी व्यक्ति का उपयोग कर रहा है (जैसा कि ओपी था - और जैसा कि मैं वर्तमान में हूं) को अपने रिकॉर्ड को "स्पर्श" करने का एक और तरीका ढूंढना होगा।

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