2011-06-14 12 views
5

मैं अपने रेल ऐप में हाल के लेख और टिप्पणियों से एक गतिविधि फ़ीड बनाना चाहता हूं। वे दो अलग-अलग प्रकार के Activerecord हैं (उनकी तालिका संरचनाएं अलग हैं)।रेल 3 में एक समाचार फ़ीड बनाना

आदर्श रूप से मैं लेखों और टिप्पणियों की एक मिश्रित सरणी बनाने में सक्षम हूं और फिर उन्हें विपरीत कालक्रम क्रम में दिखा सकता हूं।

तो, मैं समझ सकता हूं कि लेख और टिप्पणियों दोनों की एक सरणी कैसे प्राप्त करें और फिर उन्हें एक साथ मिलाएं और create_at द्वारा क्रमबद्ध करें, लेकिन मुझे पूरा यकीन है कि जैसे ही मैं पेजिनेशन का उपयोग करना शुरू करता हूं ।

वहाँ बात यह है कि एक मिश्रित सरणी पैदा करेगा की तरह एक गुंजाइश बनाने के लिए कोई तरीका है?

मेरे लिए अन्य समस्याओं में से एक यह है कि यह सभी लेख हो सकता है और यह सब टिप्पणी या बीच में कुछ संयोजन हो सकता है। तो मैं सिर्फ इतना नहीं कह सकता कि मैं 15 अंतिम लेख और 15 अंतिम टिप्पणियां लेगा।

इसे हल करने के तरीके पर कोई विचार?

+0

यह आप बाहर मदद कर सकता है http : // mickeyben।कॉम/2010/05/23/बनाने-एक-गतिविधि-फ़ीड-साथ-रेल, -एर-और-पर्यवेक्षकों.html – corroded

उत्तर

7

जब मैंने done this before मैं एक denormalised UserActivity मॉडल या एक belongs_to बहुरूपी संघ के साथ इसी तरह एक ActivitySource को होने से यह प्रबंधित किया है - जो प्रकार की सामग्री की है कि आप (पोस्ट, टिप्पणी प्रदर्शित करना चाहते हैं के किसी भी हो सकता है, वोट वोट, पसंद, जो कुछ भी ...)।

तब जब किसी भी संस्था को प्रदर्शित किया जाना है, तो आपके पास Observer है जो रिकॉर्ड के लिंक के साथ UserActivity तालिका में एक पंक्ति बनाता है और बनाता है।

तब सूची प्रदर्शित करने के, तो आप सिर्फ created_at उतरते द्वारा UserActivity आदेश पर क्वेरी, और फिर बहुरूपी activity_source संघ माध्यम से नेविगेट सामग्री डेटा प्राप्त करने के। आपको टिप्पणियों और पदों को प्रस्तुत करने के लिए अपने दृश्य टेम्पलेट्स में कुछ स्मारकों की आवश्यकता होगी और जो कुछ भी अलग हो।

उदा। कुछ की तरह ...

user_activity.rb:

class UserActivity < ActiveRecord::Base 
    belongs_to :activity_source, :polymorphic => true 

    # awesomeness continues here... 
end 

comment.rb (पोस्ट/जो कुछ भी)

class Comment < ActiveRecord::Base 
    # comment awesomeness here... 
end 

activity_source_observer.rb

class ActivitySourceObserver < ActiveRecord::Observer 

    observe :comment, :post 

    def after_create(activity_source) 
    UserActivity.create!(
     :user => activity_source.user, 
     :activity_source_id => activity_source.id, 
     :activity_source_type => activity_source.class.to_s, 
     :created_at => activity_source.created_at, 
     :updated_at => activity_source.updated_at) 
    end 

    def before_destroy(activity_source) 
    UserActivity.destroy_all(:activity_source_id => activity_source.id) 
    end 

end 
+4

इसके साथ एक समस्या यह है कि जब कोई मॉडल नष्ट हो जाता है, तो आप इसके संबंधित गतिविधियों को नष्ट कर रहे हैं विनाश के लिए एक गतिविधि पैदा करना। गिटूब की तरह एक गतिविधि फ़ीड की कल्पना करो; जब आप एक भंडार बनाते हैं, जो आपकी फ़ीड पर पोस्ट हो जाता है। जब आप एक रिपॉजिटरी हटाते हैं तो आपकी फीड से पता चलता है कि आपने एक रिपॉजिटरी हटा दी है। – bratsche

+0

@bratsche मुझे लगता है कि यह एक बढ़त मामला है। यह मेरे उद्देश्यों के लिए एक अंतर्निहित गन्दा/जटिल चीज है, अगर कोई रिकॉर्ड हटा देता है, तो मैं वास्तव में फ़ीड आइटम को हटाना चाहता हूं। – wuliwong

0

this रेलवेकास्ट पर एक नज़र डालें।

तो फिर तुम 15 लेख पृष्ठ पर अंक लगाना कर सकते हैं और app/views/articles/index में आप कुछ इस तरह कर सकते हैं:

- @articles.each do |article| 
    %tr 
    %td= article.body 
    %tr 
    %td= nested_comments article.comment.descendants.arrange(:order => :created_at, :limit => 15) 

यह निम्न संबंधों मान लिया गया है:

#app/models/article.rb 
has_one :comment # dummy root comment 

#app/models/comment.rb 
belongs_to :article 
has_ancestry 

और इस प्रकार आप एक लेख के लिए टिप्पणी जोड़ने:

root_comment = @article.build_comment 
root_comment.save 
new_comment = root_comment.children.new 
# add reply to new_comment 
new_reply = new_comment.children.new 

और आगे।

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