Rails アジャイル本 第12章 タスクG:最後のちょっとした変更
2010年03月29日
XMLレスポンスで商品カタログ配信
store
コントローラの index
メソッドで XML レスポンスを返すように変更する。
app/controllers/store_controller.rb の index
メソッド の respond_to
ブロック内で format.xml
により XML レスポンスを返させる。
respond_to do |format| format.html format.xml { render :layout => false } end
Builder テンプレート (app/views/store/index.xml.builder) で XML を生成させる。
xml.products_list do @products.each do |pdt| xml.product do xml.title(pdt.title) xml.description(pdt.description) xml.image_url(pdt.image_url) xml.price(pdt.price) end end end
拡張子 .xml でも XML レスポンスを返すようにするために、ルートを設定する。
config/routes.rb
map.connect ':controller.:format'
Builder テンプレートで XHTML を生成
上記 index.xml.builder テンプレートを XHTML を出力するように修正する。
コードは省略。
こういうのは、プログラマはハッピーかもしれないが、デザイナはアンハッピーじゃないかな。
Markaby を使って HTML レスポンスを生成
markaby を探してみると Rails 2.3.2 に対応したものを発見。
Markaby and Rails 2.3.2 – danielinsley.com
git リポジトリからインストールする。
$ ruby script/plugin install git://github.com/dinsley/markaby.git
インストール後サーバを再起動しないとプラグインを使えなかった。
いろいろサイトを探して、使い方を調べてみる。
store のテンプレート・レイアウトを Markaby で出力してみる。
app/views/layout/store.html.erb の代りに app/views/layout/store.mab を作成する。
html do head do title "Pragmatic Books Online Store" stylesheet_link_tag "depot", :media => "all" javascript_include_tag :defaults end body.store! do div.banner! do image_tag("logo.png") if @page_title span @page_title else span "Pragmatic Bookshelf" end end div.columns! do div.side! do if @cart hidden_div_if(@cart.items.empty?, :id => "cart") do render :partial => "cart", :object => @cart end end link_to 'ホーム', :controller => :store, :action => :index br link_to 'よくある質問', :controller => :faq br link_to 'ニュース', :controller => :news br link_to 'お問い合わせ', :controller => :contact br tag! :span, :class => "page-created-time" do @page_created_time end br if session[:user_id] or User.count.zero? br link_to 'Order', :controller => 'orders' br link_to 'Product', :controller => 'products' br link_to 'User', :controller => 'users' br br link_to 'Logout', :controller => 'admin', :action => 'logout' end end div.main! do if flash[:notice] div.notice! do flash[:notice] end end self << content_for_layout end end end end
これも、デザイナには嬉しくないだろうな。
同様のプラグインに Haml っていうのもあるらしい。
Unspace – Haml: HTML Abstraction Markup Language
RailsによるアジャイルWebアプリケーション開発
posted with amazlet at 10.03.15
Sam Ruby David Heinemeier Hansson Dave Thomas
オーム社
売り上げランキング: 29946
オーム社
売り上げランキング: 29946