rails:action_controller
ActionController
RailsのController部分。URL振り分けとURLに対応するアクションを記述する。
この文書は基本的にRails 2.1を対象としている。
セッション
コントローラ内で
session[:hogehoge]
で読み書きできる。
セッションの保存先は…
- CookieStore - Cookieに保存する、デフォルト。あまり保存出来ないのでsessionに大きな値を格納出来ない。漏えいしたらマズイデータは入れられない。
- FileStore - ファイルに保存する。
- MemoryStore - メモリ上に保存する。
- PStore - PStoreを利用し、マーシャルしてファイルに保存する。
- ActiveRecordStore - ActiveRecordでDBに保存する。DBサーバ負荷とシステム構成次第ではあり
- MemCacheStore - memcachedを使う。メモリを大量消費する、一番人気。
- DrbStore - DRbサーバに保存。最強?
ActiveRecordStore、MemCacheStore、DrbStore はサーバに保存するので、複数railsサーバ構成でもセッションレプリケーションやロードバランサのstickysessionを考慮しなくて良い。
セッションIDと、ちょっとした数値程度しか格納しないならばCookieStoreで十分。
ActiveRecordStore
ActiveRecordStoreを有効にするにはenvironment.rbに
config.action_controller.session_store = :active_record_store
を追加する。コメントされているので解除すればいい。
ActiveRecordStore用のテーブル(sessions)を作るには
rake db:sessions:create rake db:migration
さらにapplication.rbの
protected_from_forgery # :secret => 'xxxxxxxx'
:secretのコメントを解除する。これをしないとInvalidAuthenticityTokenというエラーが出る。これはクロスサイトリクエストフォージェリ対策のようだ
flash
flashはセッションに似ているが次のリクエストまでセッションに保存される。コントローラでセットした値をリダイレクト先で参照したい場合はこれに入れる。
flash[:notice] = '保存しました。' redirect_to items_index_url(@item)
ページキャッシュ
参照ばっかりでめったに更新されない動的コンテンツはキャッシュしてしまおう。
config/environments/*.rb
ActionController::Base.perform_caching = true
コントローラ
class HogeController < ActionController::Base page_cache :show def show @hoge = Hoge.find(params[:hoge]) end def update # 更新処理~ @hoge = Hoge.find(params[:hoge]) @hoge.update_attribute(params[:hoge]) # キャッシュを無効に expire_page :action => :show, :id => @hoge.id end end
キャッシュの無効化はコントローラに書くのではなく、CacheSweeperというObserverに任せるのが一般的。
rails/action_controller.txt · 最終更新: 2008/11/25 07:54 by 127.0.0.1