RailsのController部分。URL振り分けとURLに対応するアクションを記述する。
この文書は基本的にRails 2.1を対象としている。
コントローラ内で
session[:hogehoge]
で読み書きできる。
セッションの保存先は…
ActiveRecordStore、MemCacheStore、DrbStore はサーバに保存するので、複数railsサーバ構成でもセッションレプリケーションやロードバランサのstickysessionを考慮しなくて良い。
セッションIDと、ちょっとした数値程度しか格納しないならばCookieStoreで十分。
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[: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に任せるのが一般的。