サイトアイコン Lonely Mobiler

Rails で RSS を出力する方法

Rails で RSS を出力するにはどうすれば良いのか調べてみたが、標準で搭載されている Builder 機能を利用するのが楽っぽかったので試してみた。

ググって出てくる情報だと拡張子によって表示の出し分けを行うものが多かったのだが WordPress みたいに拡張子無しの /feed で RSS を表示するには, controller で respond_to を使用せず以下のように直接 render メソッドを呼ぶとできた。

class ArticlesController < ApplicationController def index end

def feed @entries = Article.order('id desc').limit(10)

render 'feed.rss.builder' end end

これにあわせてルーティングを記述する

# config/routes.rb match 'feed' => 'article#feed', via: 'get', :as => 'feed'

feed.rss.builder は以下のような感じ。

cache_key = 'feed_cache_key_' + request.url cache cache_key, expires_in: 30.minutes do xml.instruct! :xml, :version => 1.0 xml.rss(version: '2.0') do xml.channel do xml.title @title xml.link @url xml.description '' xml.lastBuildDate Time.zone.now.to_s(:rfc822)

@articles.each do |article| xml.item do xml.title article.title xml.link article.url xml.guid article.url xml.description do xml.cdata! article.description end xml.pubData article.created_at.to_s(:rfc822) end end end end end

ついでにキャッシュも設定してある。更新頻度にもよるがある程度キャッシュしておけばサーバーの負荷を軽減できる。

このような感じに実装すれば /feed にアクセスすれば RSS が表示されるはずだ。

Sponsored Link
モバイルバージョンを終了