How do I make an RSS/Atom feed in Rails 3?

Ruby on-RailsRssRuby on-Rails-3

Ruby on-Rails Problem Overview


I'm pretty new to Rails 3, and I'm trying to make an RSS/Atom feed. I know about auto_discovery_link_tag, but what is the associated controller/action supposed to look like?

Thanks!

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

Auto_discovery_link_tag is a good start. A quick Google search and I found blog posts on How to Create an RSS feed in Rails. Let me fill you in on what your associated controller/action is supposed to look like:

controllers/posts_controller.rb

def feed
    @posts = Post.all(:select => "title, author, id, content, posted_at", :order => "posted_at DESC", :limit => 20) 
    
    respond_to do |format|
      format.html
      format.rss { render :layout => false } #index.rss.builder
    end
end

The name of this file should match the controller. See, below:

views/posts/feed.rss.builder

xml.instruct! :xml, :version => "1.0" 
xml.rss :version => "2.0" do
  xml.channel do
    xml.title "Your Blog Title"
    xml.description "A blog about software and chocolate"
    xml.link posts_url

    for post in @posts
      xml.item do
        xml.title post.title
        xml.description post.content
        xml.pubDate post.posted_at.to_s(:rfc822)
        xml.link post_url(post)
        xml.guid post_url(post)
      end
    end
  end
end

This is where all the Railsy magic happens. Here, the RSS feed XML is generated and returned to HTTP.

Solution 2 - Ruby on-Rails

Using the auto_discovery_link_tag:

In the controller:

respond_to do |format|
  format.html
  format.atom {render action: 'index', layout: false}
end

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsimonistaView Question on Stackoverflow
Solution 1 - Ruby on-RailsMatt LennardView Answer on Stackoverflow
Solution 2 - Ruby on-RailsthatmiddlewayView Answer on Stackoverflow