memo: Railsで、とあるRSSを生成した際のbuilder

「:」付き要素を生成したり、キャッシュを使ったり、アレコレ調べて苦労したので、自分用メモとして残しておく。

# feed.rss.builder

xml.instruct!

xml.rss version: "2.0",
        "xmlns:dc"      => "http://purl.org/dc/elements/1.1/" do
  xml.channel do
    xml.title @site_title
    xml.description @site_description
    xml.link @site_url

    @entries.each do |entry|
      xml.item do
        xml.title entry.title
        xml.description entry.description
        xml.pubDate entry.created_at.to_s(:rfc822)
        xml.link entry.url
        xml.guid entry.url
        xml.tag!("foo:bar",  url: entry_image_url(entry))
        xml.tag!("john:smith") do
          cache({ controller: "foo", action: "bar", part: "rss", id: entry.id }, expires_in: 1.hour) do
            xml.cdata! render partial: "cdata", formats: "html", locals: { foo: "bar" }
          end
        end
      end
    end
  end
end

ポイント

  • コロン付要素使いたければ、xml.tag! を使えばいい。
  • ブロックにすればキャッシュ使える。(他の方法もあるかも)
  • partial を render することもできる。