2011-01-28 15 views

उत्तर

114

सबसे पहले, आजकल मैं आरएसएस के बजाय एटीओएम फ़ीड का उपयोग करने की सलाह देता हूं।

एटीओएम फ़ीड का विनिर्देश अंतर्राष्ट्रीयकरण, सामग्री प्रकार और अन्य चीजों के साथ आरएसएस की तुलना में अधिक मूल्य प्रदान करता है और प्रत्येक आधुनिक फ़ीड रीडर इसका समर्थन करता है।

अधिक एटम बनाम आरएसएस के बारे में जानकारी में पाया जा सकता: विषय


के बारे में

  • Wikipedia ATOM entry
  • PRO Blogger और Free Marketing Zone ब्लॉग पोस्ट कोडिंग करने पर:

    इस उदाहरण में कल्पना:

    • एक मॉडल निम्न विशेषताओं वाला NewsItem कहा जाता है:
      • title
      • content
      • author_name
    • कि मॉडल (news_items_controller.rb), के लिए एक नियंत्रक जिसे आप feed एसी जोड़ देंगे tion

    हम इसके लिए एक निर्माता टेम्पलेट का उपयोग करेंगे और रूबी atom_feed helper पर रूबी का उपयोग करेंगे जो कि बहुत अच्छा है।

    1. app/controllers/news_items_controller.rb को नियंत्रक

    जाओ करने के लिए कार्रवाई करें और जोड़ें:

    def feed 
        # this will be the name of the feed displayed on the feed reader 
        @title = "FEED title" 
    
        # the news items 
        @news_items = NewsItem.order("updated_at desc") 
    
        # this will be our Feed's update timestamp 
        @updated = @news_items.first.updated_at unless @news_items.empty? 
    
        respond_to do |format| 
        format.atom { render :layout => false } 
    
        # we want the RSS feed to redirect permanently to the ATOM feed 
        format.rss { redirect_to feed_path(:format => :atom), :status => :moved_permanently } 
        end 
    end 
    

    2. सेटअप अपने बिल्डर टेम्पलेट

    अब निर्माण करने के लिए टेम्पलेट जोड़ने भोजन।

    app/views/news_items/feed.atom.builder पर जाएं और जोड़ें:

    atom_feed :language => 'en-US' do |feed| 
        feed.title @title 
        feed.updated @updated 
    
        @news_items.each do |item| 
        next if item.updated_at.blank? 
    
        feed.entry(item) do |entry| 
         entry.url news_item_url(item) 
         entry.title item.title 
         entry.content item.content, :type => 'html' 
    
         # the strftime is needed to work with Google Reader. 
         entry.updated(item.updated_at.strftime("%Y-%m-%dT%H:%M:%SZ")) 
    
         entry.author do |author| 
         author.name entry.author_name 
         end 
        end 
        end 
    end 
    

    3. तार यह एक मार्ग के साथ

    के http://domain.com/feed

    पर फ़ीड उपलब्ध बनाने चलो यह एटम के साथ कार्रवाई कॉल करेंगे डिफ़ॉल्ट रूप से प्रारूप और /feed.rss से /feed.atom पर रीडायरेक्ट करें।

    config/routes.rb पर जाएं और जोड़ें:

    resources :news_items 
    match '/feed' => 'news_items#feed', 
         :as => :feed, 
         :defaults => { :format => 'atom' } 
    

    4. एटम के लिए लिंक जोड़ें और आरएसएस लेआउट पर फ़ीड

    अंत में, वह सब छोड़ दिया है लेआउट के लिए फ़ीड जोड़ने का है ।

    app/views/layouts/application.html.erb पर जाएं

    और यह आपकी <head></head> अनुभाग जोड़ें:

    <%= auto_discovery_link_tag :atom, "/feed" %> 
    <%= auto_discovery_link_tag :rss, "/feed.rss" %> 
    

    मुद्रण की गलती या कि में दो हो सकता है, इसलिए मुझे पता है अगर यह आपके लिए काम करता है।

+1

क्रेडिट देने के लिए, यह एक कार्यान्वयन मैंने किया था और उपयोग पर आधारित इस ब्लॉग पोस्ट और अपनी टिप्पणी है: http://lindsaar.net/2010/2/12/how -to-make-an-rss-feed-or-atom-feed-in-rails – tomeduarte

+0

लेकिन इंडेक्स एक्शन के लिए बस एक नए प्रारूप के विपरीत एक पूरी तरह से नई कार्रवाई क्यों जोड़ें? – holden

+2

@ होल्डन - क्योंकि मुझे कोड पुन: उपयोग करना पसंद है और इसे कई परियोजनाओं पर मॉड्यूल के रूप में उपयोग करना है। इस तरह, अगर मैं कुछ बदलना चाहता हूं तो यह एक बार का परिवर्तन है और इंडेक्स एक्शन लॉजिक को प्रभावित नहीं करता है (उदाहरण के लिए आपके उत्तर में किए गए फ़ीड प्रारूपों के लिए पेजिनेशन को अक्षम करना)। व्यक्तिगत वरीयता, दोनों समान रूप से वैध imho हैं। – tomeduarte

10

मैंने कुछ ऐसा किया लेकिन बिना किसी नई कार्रवाई के।

index.atom.builder

atom_feed :language => 'en-US' do |feed| 
    feed.title "Articles" 
    feed.updated Time.now 

    @articles.each do |item| 
    next if item.published_at.blank? 

    feed.entry(item) do |entry| 
     entry.url article_url(item) 
     entry.title item.title 
     entry.content item.content, :type => 'html' 

     # the strftime is needed to work with Google Reader. 
     entry.updated(item.published_at.strftime("%Y-%m-%dT%H:%M:%SZ")) 
     entry.author item.user.handle 
    end 
    end 
end 

आप जब तक आप कुछ विशेष कोड है जैसे मैंने किया नियंत्रक में कुछ भी विशेष करने की जरूरत नहीं है। उदाहरण के लिए मैं will_paginate मणि का उपयोग कर रहा हूं और परमाणु फ़ीड के लिए मैं इसे पगनेट नहीं करना चाहता, इसलिए मैंने इसे टालने के लिए ऐसा किया।

नियंत्रक जहां यह कारण है

def index 
    if current_user && current_user.admin? 
     @articles = Article.paginate :page => params[:page], :order => 'created_at DESC' 
    else 
     respond_to do |format| 
     format.html { @articles = Article.published.paginate :page => params[:page], :order => 'published_at DESC' } 
     format.atom { @articles = Article.published } 
     end 
    end 
    end 
+0

आपका उदाहरण बहुत सीधे आगे दिखता है - क्या यह परमाणु फ़ीड काम करने के लिए केवल 2 कदम हैं या क्या और अधिक हैं? – ubique

+0

@ubique: मैंने अभी जिज्ञासा से अपने नियंत्रकों में से एक में इसके साथ खेला। यह नए रेल 3 प्रारूप का उपयोग करता है, इसलिए मुझे बस इतना करना था: my respond_ at हैश पर मेरा जवाब - मुझे answer_with को भी स्पर्श नहीं करना पड़ा। रेल ने स्वचालित रूप से index.atom.builder को नियंत्रक को कोई और संशोधन नहीं मिला। मैं एक PHP पृष्ठभूमि से आ रहा हूँ पूरी तरह से प्रभावित हूँ! –

+0

यदि मैं लेख के लिए एक छवि प्रदर्शित करना चाहता हूं तो मैं छवि प्रविष्टि कैसे पास करूं। – Uchenna

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