僕にとってすごいなだと思っているソースコードをピックアップした。
その1
アクションを実行前にリクエストを検証する。
class EntriesController < ApplicationController
veriy :session => "user_id" , :method=>:post ,
:redirect_to => { :action=>"index" },
:only => [:create,:update,:delete]
(略)
end
その2
httpのメソッドを検証する。
class EntriesController < ApplicationController
before_filter do |controller|
referer = controller.request.referer.env["HTTP-REFERER"]
redirect_to login_url unless /examp.com/ === referer
end
(略)
end
その3
リクエストの種類によってレスポンスのフォーマットを変更する。
class EntriesController < ApplicationController
def list
@entries = Entry.find(:all)
(略)
respond_to do |format|
format.html
format.js
format.xml{ render :xml=>@entries.to_xml }
end
end
実は僕もこの辺でどいう仕組みで処理されるか曖昧であった。なので、
ちょっと纏めってみた。
このformat.htmlメソッドのようにブロックを渡さずに実行した場合には以下のデフォルトのブロックが実行される。
メソッド | デフォルトブロック |
---|---|
html | { render :action => action_name } |
js | { render :action => "#{action_name}.rjs" } |
xml | { render :action => "#action_name.xml.builder" } |
独自のフォーマットを追加したい場合には、Mime::Type.registerメソッドを使う。
上記のように定義した場合、次のようにrespond_toメソッドでjpgとpng向けのフォーマット指定ができるようになる。def icon
(略)
respond_to do |format|
format.jpg{ send_data(image.tojpg , :dispotision=>"inline" , :type=>"image/jpeg") }
format.jpg{ send_data(image.topng , :dispotision=>"inline" , :type=>"image/png") }
}
end
以上のようにRailsならではのソースコードの書き方だと思う。
- 作者: 高橋征義,諸橋恭介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/05/31
- メディア: 単行本
- 購入: 37人 クリック: 567回
- この商品を含むブログ (92件) を見る