Hoje vou mostrar como criar Rss Feed no Ruby on Rails 2.2, no final você vai dar risada, de tão simples que é. Vamos lá!
Geralmente a action index é responsável por fazer a listagem das informações, ela pode ser parecer com isso:
1 2 3 | def index @histories = History.find :all, :limit => 10 end |
ou como abaixo, quando você está usando o plugin will_paginate:
1 2 3 | def index @histories = History.paginate :all, :page => params[:page] end |
Não vamos precisar mexer em nada na action index.
Você precisa criar um novo template chamado index.rss.builder, que deve estar localizado em app/views/histories/index.rss.builder com o seguinte conteúdo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | xml.instruct! 'xml', :version => "1.0" xml.rss :version => "2.0" do xml.channel do xml.title "Notícias" xml.description "Últimas Notícias" xml.language('pt-BR') xml.link formatted_histories_url(:rss) for history in @histories xml.item do xml.title history.title xml.description history.content xml.pubDate history.created_at.to_s(:rfc822) xml.link history_url(history) xml.guid history_url(history) end end end end |
Pronto! O que você não acredita que está pronto? É verdade falta adicionar o link no template index.html.erb para ver o Rss Feed.
No template index.html.erb adicione:
1 | <%= link_to " RSS Feed", formatted_histories_url(:rss) %> |
Para acessar o Rss Feed visite: http://localhost:3000/histories.rss.
Não esqueça de definir no seu arquivo config/routes.rb que o model history trabalha com urls RESTful:
1 | map.resources :histories |
Uhmm! Não estou feliz ainda, acho que dá para melhorar mais, é verdade podemos adicionar:
1 | <link href="http://localhost:3000/histories.rss" rel="alternate" title="RSS" type="application/rss+xml" /> |
Entre as tags:
1 | <head>...</head> |
do HTML, fazendo isso o navegador adiciona o ícone de Feed na barra de endereço e deixa a coisa mais intuitiva para o usuário.
Vamos fazer isso de uma forma mais elegante e dinâmica.
No layout da sua aplicação adicionei yield :auto_discovery entre as tags head do HTML:
1 2 3 4 5 | <head> ... <%= yield :auto_discovery %> ... </head> |
Agora no template index.html.erb adicione:
1 2 3 | <% content_for :auto_discovery do %> <%= auto_discovery_link_tag(:rss, :action => :index, :format => :rss) %> <% end %> |
Agora sim ficou legal! ;-)
Mais informações assista aqui: http://media.railscasts.com/videos/087_generating_rss.mov.
Se você gostou desse texto e acha que ajudou você, me recomende:
.
