मैं रेल 3 में फ़ीड उत्पन्न करने के लिए एक सर्वोत्तम अभ्यास/मानक पैटर्न की तलाश में हूं। http://railscasts.com/episodes/87-generating-rss-feeds अभी भी मान्य है?रेल में आरएसएस फ़ीड उत्पन्न करना 3
उत्तर
सबसे पहले, आजकल मैं आरएसएस के बजाय एटीओएम फ़ीड का उपयोग करने की सलाह देता हूं।
एटीओएम फ़ीड का विनिर्देश अंतर्राष्ट्रीयकरण, सामग्री प्रकार और अन्य चीजों के साथ आरएसएस की तुलना में अधिक मूल्य प्रदान करता है और प्रत्येक आधुनिक फ़ीड रीडर इसका समर्थन करता है।
अधिक एटम बनाम आरएसएस के बारे में जानकारी में पाया जा सकता: विषय
के बारे में
- 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. तार यह एक मार्ग के साथ
पर फ़ीड उपलब्ध बनाने चलो यह एटम के साथ कार्रवाई कॉल करेंगे डिफ़ॉल्ट रूप से प्रारूप और
/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" %>
मुद्रण की गलती या कि में दो हो सकता है, इसलिए मुझे पता है अगर यह आपके लिए काम करता है।
- एक मॉडल निम्न विशेषताओं वाला
मैंने कुछ ऐसा किया लेकिन बिना किसी नई कार्रवाई के।
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
आपका उदाहरण बहुत सीधे आगे दिखता है - क्या यह परमाणु फ़ीड काम करने के लिए केवल 2 कदम हैं या क्या और अधिक हैं? – ubique
@ubique: मैंने अभी जिज्ञासा से अपने नियंत्रकों में से एक में इसके साथ खेला। यह नए रेल 3 प्रारूप का उपयोग करता है, इसलिए मुझे बस इतना करना था: my respond_ at हैश पर मेरा जवाब - मुझे answer_with को भी स्पर्श नहीं करना पड़ा। रेल ने स्वचालित रूप से index.atom.builder को नियंत्रक को कोई और संशोधन नहीं मिला। मैं एक PHP पृष्ठभूमि से आ रहा हूँ पूरी तरह से प्रभावित हूँ! –
यदि मैं लेख के लिए एक छवि प्रदर्शित करना चाहता हूं तो मैं छवि प्रविष्टि कैसे पास करूं। – Uchenna
- 1. आप आरएसएस फ़ीड कैसे उत्पन्न करते हैं?
- 2. आरएसएस फ़ीड
- 3. आरएसएस फ़ीड
- 4. आरएसएस फ़ीड
- 5. आरएसएस फ़ीड
- 6. आरएसएस फ़ीड में छवियां
- 7. टीएफएस चेकइन आरएसएस फ़ीड
- 8. आईफोन विकास: आरएसएस फ़ीड
- 9. Django आरएसएस फ़ीड में example.com
- 10. Django आरएसएस फ़ीड प्रमाणीकरण
- 11. आरएसएस फ़ीड विलय
- 12. बाहरी आरएसएस फ़ीड
- 13. आरएसएस फ़ीड का परीक्षण
- 14. एएसपी.NET आरएसएस फ़ीड
- 15. एथ/आरएसएस फ़ीड गिटूब मुद्दे पर फ़ीड?
- 16. रेल 3 में एक समाचार फ़ीड बनाना
- 17. पार्स आरएसएस फ़ीड एएसपीनेट सी #
- 18. एक गिथब कमिट आरएसएस फ़ीड
- 19. स्कैला पार्सिंग आरएसएस/एटम फ़ीड
- 20. एलकेएमएल मेलिंग सूची आरएसएस फ़ीड?
- 21. "खाली" आरएसएस फ़ीड कैसे बनाएं
- 22. एसवीएन भेजना एक आरएसएस फ़ीड
- 23. ब्लॉगर में यूट्यूब वीडियो एटम/आरएसएस फ़ीड
- 24. एएसपी.NET 3.5 में एक आरएसएस फ़ीड बनाना
- 25. आरएसएस फ़ीड जावा में पार्सर लाइब्रेरी
- 26. जावा के साथ आरएसएस फ़ीड कैसे लिखें?
- 27. मैं अपने आरएसएस फ़ीड में कितने परिणाम देना चाहिए?
- 28. रूबी/रेल में एटम और आरएसएस पार्सिंग?
- 29. गायब लिपि/रेल में उत्पन्न 3
- 30. आरएसएस फ़ीड को एक MySQL डेटाबेस
क्रेडिट देने के लिए, यह एक कार्यान्वयन मैंने किया था और उपयोग पर आधारित इस ब्लॉग पोस्ट और अपनी टिप्पणी है: http://lindsaar.net/2010/2/12/how -to-make-an-rss-feed-or-atom-feed-in-rails – tomeduarte
लेकिन इंडेक्स एक्शन के लिए बस एक नए प्रारूप के विपरीत एक पूरी तरह से नई कार्रवाई क्यों जोड़ें? – holden
@ होल्डन - क्योंकि मुझे कोड पुन: उपयोग करना पसंद है और इसे कई परियोजनाओं पर मॉड्यूल के रूप में उपयोग करना है। इस तरह, अगर मैं कुछ बदलना चाहता हूं तो यह एक बार का परिवर्तन है और इंडेक्स एक्शन लॉजिक को प्रभावित नहीं करता है (उदाहरण के लिए आपके उत्तर में किए गए फ़ीड प्रारूपों के लिए पेजिनेशन को अक्षम करना)। व्यक्तिगत वरीयता, दोनों समान रूप से वैध imho हैं। – tomeduarte