2011-10-20 14 views
7

यह Creating "feeds" from multiple, different Rails models का पालन करता है। इस सवाल में, tadman तीन मॉडलों (टिकट, डाक, रिपोर्ट) से हाल ही मदों की एक उपयोगकर्ता फ़ीड बनाने की इस पद्धति का पता चलता है:कुशलतापूर्वक कई रेल मॉडल से "फ़ीड" बनाना?

@items = [ Ticket, Post, Report ].inject([ ]) do |a, with_class| 
    a + with_class.find(:all, :limit => 10, :order => 'created_at DESC') 
end.sort_by(&:created_at).reverse[0, 10] 

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

मुझे इस वैकल्पिक समाधान के बारे में अधिक जानने में वास्तव में दिलचस्पी है, यह दोनों अधिक कुशल और अधिक सुरुचिपूर्ण लगता है। क्या कोई मुझे बता सकता है कि यह कैसे करेगा? चलिए आधार के रूप में अंतिम प्रश्न से वही पृष्ठभूमि जानकारी का उपयोग करते हैं।

उत्तर

6

मैंने एक बार क्या किया था, एक अलग मॉडल फ़ीड (feeds_controller) है और इसे interesting मॉडल के बाद कॉलबैक के बाद अपडेट करें।

def after_save 
    feed = Feed.new 
    feed[:model_name] = 'Article' 
    feed[:item_id] = id 
    feed.save 
end 

तो, तुम बस किसी भी अन्य मॉडल की तरह रैखिक फ़ीड पहुंच सकता है: उदाहरण के लिए यदि आप एक मॉडल अनुच्छेद है, एक after_save कॉलबैक है। फीड को बचाने के दौरान फ़ीड को सहेजते समय कम्प्यूटेशनल व्यय किया जाता है।

ओह, आप Feed has_many :article; has_many :user, has_many :status और आगे भी :include फ़ीड में उन सभी संसाधनों को देख सकते हैं, और उन्हें विचारों में प्रस्तुत कर सकते हैं। उम्मीद है कि यह समझ में आता है ;-)

+0

यह आशाजनक लग रहा है। धन्यवाद! – jay

+0

किसी भी विचार को इसे नियंत्रक में कैसे रखा जाए और इसे एक दृश्य में प्रस्तुत किया जाए? सुनिश्चित नहीं है कि आपका क्या मतलब है "तो: फ़ीड में उन सभी संसाधनों को शामिल करें"? – Terryfrancis

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