2013-04-18 11 views
19

जब एक has_many संघ के रिकॉर्ड को जोड़ने और माता-पिता की बचत, कि माता-पिता की updated_at टकरा नहीं है बनाने के लिए:कैसे ActiveRecord नई has_many संघ पर updated_at टक्कर

order = Order.new 
order.save 
pp order 
    => #<Order id: 3, created_at: "2013-04-18 15:25:09", updated_at: "2013-04-18 15:25:09"> 
order.line_items << LineItem.new() 
pp order.line_items 
    => [#<LineItem id: 4, order_id: 3, created_at: "2013-04-18 15:26:16", updated_at: "2013-04-18 15:26:29", product_id: 123>] 
order.save 
pp order.reload 
    => #<Order id: 3, created_at: "2013-04-18 15:25:09", updated_at: "2013-04-18 15:25:09"> 

यह समझ में आता है, Order beacause इसे छुआ नहीं; विदेशी कुंजी LineItem पर रहता है। (: गया "अद्यतन" पिछले 30 मिनट में यानी)

हालांकि, इस मामले में, मैं Order क्वेरी और केवल Order कि पिछले 30 मिनट में नए LineItem रों प्राप्त करने वाले को खोजने के लिए चाहते हैं।

मुझे यकीन नहीं है कि यहां क्या करना सबसे अच्छा है, और मैं इसे आसानी से कैसे प्राप्त कर सकता हूं। क्या कोई ध्वज या विधि है जिसे मैं एआर को माता-पिता updated_at वर्णित करने के लिए सेट कर सकता हूं? या मुझे कुछ हुक के माध्यम से ऐसा करना चाहिए? यदि हां, तो क्या हुक? या मुझे इस टाइमस्टैम्प को एक अलग कॉलम में स्टोर करना चाहिए?

ध्यान दें कि मैं line_items.updated_at को join(:line_items) से पूछताछ कर सकता हूं, लेकिन शायद यह मेरा कोड अधिक अव्यवस्थित और कम प्रदर्शन करेगा: या रेल में ऐसे मुद्दों के लिए यह पसंदीदा तरीका है?

उत्तर

32

आपको belongs_to :order एसोसिएशन के साथ touch: true शामिल करने की आवश्यकता है।

class Order < ActiveRecord::Base 
    has_many :line_items 
end 


class LineItem < ActiveRecord::Base 
    belongs_to :order, touch: true 
end 

यह संबंधित आदेश के लिए updated_at कॉलम अपडेट करेगा। अधिक दस्तावेज़ here

3

आप नीचे दिखाए गए अनुसार स्पर्श विकल्प का उपयोग कर सकते हैं।

class LineItems < ActiveRecord::Base 
    belongs_to :order, :touch => true 
    ... 
end 

जब भी लाइनिटम सहेजा या नष्ट हो जाता है तो यह मूल आदेश के "update_at" को अपडेट करेगा।

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html से हवाला देते हुए,

: स्पर्श

If true, the associated object will be touched (the updated_at/on attributes set to now) when this record is either saved or destroyed. 

आप एक प्रतीक निर्दिष्ट करते हैं, उस गुण/updated_at के अलावा वर्तमान समय के साथ अपडेट किया जाएगा विशेषता पर।

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