3 Apr 2007, 3:28pm

by Ariejan de Vroom

TipSnippet: Create a RSS feed

RSS is hot! So, you want to fit your new Rails app with one too! That’s easy, of course, but you just need to know what to do.

This snippet will show you how to create an RSS feed form your RESTful articles. I’ll assume you know how to generate a resource named ‘article’ with a title, body and the default created_at and updated_at attributes.

You’ll first need to add a new collection to your resource in config/routes.rb

map.resources :articles, :collections => {:rss => :get}

This will expose your RSS feed as http://localhost:3000/articles;rss

Create a corresponding action in the articles controller in app/controllers/articles_controller.rb. This method fetches the ten latest articles.

def rss
  @articles = Article.find(:all, :limit => 10, :order => 'created_at DESC')
  render :layout => false
end

I assume you render your articles in a layout. The render method here prevents your layout from rendering to create a plain XML file (which is what an RSS feed is).

Next we create a view. This is not the regular RHTML you’re used to but RXML. This enables the XML generator which we’ll use to generate the RSS feed. Create app/views/articles/rss.rxml

xml.instruct! :xml, :version=>"1.0"
xml.rss(:version=>"2.0"){
  xml.channel{
    xml.title("My Great Blog")
    xml.link("http://www.example.com/")
    xml.description("My great blog about very interesting stuff!")
    xml.language('en-uk')
      for article in @articles
        xml.item do
          xml.title(article.title)
          xml.description(article.body)
          xml.author("support@example.com")
          xml.pubDate(article.created_at.strftime("%a, %d %b %Y %H:%M:%S %z"))
          xml.link(article_url(article))
          xml.guid(article_url(article))
        end
      end
  }
}

Well, that’s it. You now have a working RSS feed!

If you want to enable auto discovery, you should add the following line to the header of your layout. (Auto discovery enables that little RSS icon in the address bar of your browser.)

< %= auto_discovery_link_tag(:rss, :controller => 'articles', :action => 'rss') %>

Share and enjoy! Thank you.

Please share the love of this post by bookmarking it, and sharing it with others. Thanks!

  • Digg
  • del.icio.us
  • description
  • Reddit
  • Technorati
  • BlinkList
  • E-mail this story to a friend!
  • Facebook
  • Live
  • MisterWong
  • Netvouz
  • NewsVine
  • Slashdot
  • SphereIt
6 Apr 2007, 10:22pm
by mike


Thanks for the tip. I love the simplicity of this.

FYI you have a typo in your route. Instead of “collections” you need to change it to “collection”.

20 Jun 2007, 9:21pm
by joey1979


Heya. If people find the article above difficult, try using http://www.irisfeed.com. It will create an RSS and Atom feed for your website automatically.

2 Sep 2007, 12:17am
by links for 2007-09-01


[...] Ariejan.net » Blog Archive » TipSnippet: Create a RSS feed (tags: Programming rails rss Ruby tutorial howto) Posted by Brandon { article rss } Trackbacks [...]

*name

*e-mail

web site

leave a comment