Rails3でHaml

HamlでHTMLを出力しようとは思わないのですが、XMLの場合は別です。噂ではrailsでテンプレートエンジンのごちゃまぜは出来ないという噂を聞いていたのですが、試して出来たのでメモっておきます。今回は、Atom出力にしてみましたが、拡張子をXMLにすることも勿論出来ます。その場合には適宜読み替えてください。

Gemfileに"haml"を追加

gem "haml"

bundle installもお忘れなく

$ bundle install

これで準備Ok。

controllerの作成

def show
  @upload = Upload.find(params[:id])
  respond_to do |format|
      format.html # show.html.erb
      format.atom # この行を追加
  end
end

viewの作成

"show.atom.haml"を作成する。"show.html.erb"は削除しなくても良い。ファイルの中身は以下のような感じにする。Hamlは癖があるので、動くことを確認しつつ書くのがオススメ。

!!! XML
%feed{ :xmlns => "http://www.w3.org/2005/Atom" }
  %title @blog.title
  %subtitle @blog.subtitle
  %id @blog.id
  %author
    %name hello
  %updated= Time.now


  - for entry in @blog.entries
    %entry
      %title= entry.title
      %link{ :href => entry.url }
      %published= entry.created_at
      %updated= entry.updated_at
      %id= entry.taguri
      %summary= entry.description

確認

例)http://localhost:3000/blogs/1.atom

Atom出力できているはず…!!

補足

http://d.hatena.ne.jp/Artisan/20110405