ウェブプログラミングおじさん

PHPとRubyと時々CSSやJSなどなど

RailsでRSSを一番簡単に発行するには

僕がさがした中で最も簡単だったのは、Rails組み込みのrss builderを使うやり方。

ルーティング設定

まず初めに、rssという拡張子の付いていないルーティングを定義します。

get 'feed', to: 'posts#feed'

コントローラーの書き方

必要なデータを用意した後、respond_toで、rss拡張子に対応することを設定します。

def feed
  @posts = Post.order(created_at: :desc).limit(50)
  respond_to do |format|
    format.rss
  end
end

ビューの書き方

xmlヘルパーを使って定義します。
ファイルの拡張子は、.erbではなく、.rss.builderとしなければなりません。

xml.instruct! :xml, :version => "1.0" 
xml.rss("version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/") do
  xml.channel do
    xml.title 'ここにサイトのタイトル'
    xml.description 'ここにサイトの説明(必要ならば)'
    xml.link 'http://example.com'
    @posts.each do |p|
      xml.item do
        xml.title p.title
        xml.description do
          xml.cdata! 'ほげほげ'
        end
        xml.pubDate p.created_at
        xml.guid "http://example.com/view/#{p.id}"
        xml.link "http://example.com/view/#{p.id}"
      end
    end
  end
end

これで無事にRSSが発行できました。
今回のルーティングなら、http://example.com/feed.rssにてアクセスできます。
めでたしめでたし。