ユーザ用ツール

サイト用ツール


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