コントローラについて(赤本P414)

コントローラの戻り値(赤本P416)

  • コントローラはリクエストごとに、
  • renderメソッド(P417)
  • redirect_toメソッド(P421)
  • send_xxxメソッド
  • のいずれかを1つのみ呼び出せる。
  • ※これらのメソッドは実行メソッドを終了させるものではない。
  • いずれもない場合は、メソッド名から対応するviewを表示する。(これが標準の手法)

フラッシュ(赤本P434)

  • リダイレクト後まで値を保持する機能。
  • flash[:notice] = "ここにメッセージを書く"
  • flash.now[:notice]   //--フラッシュを更新するが、セッションには追加しない?
  • flash.keep(:notice)  //--現在フラッシュの中身を次のリクエストまで保持する。引数なしだと全て保持。

フォームの値の検証(赤本P360)

属性の値が特定の範囲外(内)であることの検証(赤本P361)

  • validates_exclusion_of :age, :in => 0..19, :message => "一緒に飲みに行きましょう!"
  • validates_inclusion_of :age, :in => 0..19, :message => "酒は20歳からだよ!"

属性値の長さを検証(赤本P362)

  • validates_length_of :name, maximum => 50,
  • validates_length_of :password, :in => 6..20
  • (別名)validates_size_of

属性が有効な数値であることを検証(赤本P363)

  • validates_numericality_of :age, :only_integer => true

属性が空でないことを検証(赤本P364)

  • validates_presence_of :name, :password

属性が一意であることを検証(赤本P364)

  • validates_uniqueness_of :name, :scope => "group_id"
※検証時に一意であるだけで保存時は考慮されていない、が、まぁそう気にしないでいいだろ。

全ての検証メソッドには:ifと:unlessが付けれる(赤本P365)

  • Proc使うのが一般的らしい。
  • 詳しくは赤本読め。

保存の前(後)に検証(赤本P367)

  • before_validation :[メソッド名]
など。

フィルタと検証(赤本P436)

基本

  • before:アクションを実行する直前/falseを返すとアクションは実行されない。
  • after :アクションを実行した直後
  • around:上記の両方

before/afterフィルタ

  • コントローラに設定する。
  • before_filter :[実行メソッド] (,[オプション])
  • after_filter :[実行メソッド] (,[オプション])
  • ex)before_filter :authorize, :except => :login
  • ex)after_filter :log_access, :only => [:delete, :edit]
  • アクション実行前にauthorizeメソッドを実行する。ただし、loginメソッドの前には実行しない。
  • アクション実行後にlog_accessメソッドを実行する。ただし、deleteメソッドとeditメソッドの時だけ。

オプション 説明
:except フィルタから除外するメソッドを指定
:only フィルタを実行するメソッドを指定

aroundフィルタ

  • around_folter :[実行メソッド]
  • アクションはyieldで呼び出す。
ex)
def time_an_action
  started = Time.now
  yield  #ココで呼び出したメソッドを実行
  elapsed = Time.now - started
  logger.info("#{action_name} took #{elapsed} seconds")
end
  • オプションはbefore/afterと一緒。

検証(赤本P441)

  • beforeフィルタの一般的な用途は値が条件を満たしているかどうか。verifyを使えばより簡単に書ける。
  • verify [オプション]...
ex)
verify :only        => :post_comment,
       :session     => :user_id,
       :add_flash   => { :note => "コメントするならログインしろ" },
       :redirect_to => :index

オプション 説明
適用範囲  
:only 指定したアクションのみ検証する
:except 指定したアクション以外検証する
テスト  
:flash フラッシュが指定したキーを含む必要がある。
:method リクエストメソッド(get、post等)が、指定したシンボルのどれかと一致するか。
:params リクエストパラメータが指定したキーを含む必要がある。
:session セッションが指定したキーを含む必要がある。
:xhr リクエストは、Ajaxとして呼び出されたか。
アクション  
:add_flash フラッシュにマージできる。要は追加できるってことかな。
:add_headers レスポンスヘッダにマージできる。要はついk(ry
:redirect_to 指定したパラメータハッシュを使ってリダイレクトする。
:render 指定したパラメータハッシュを使ってレンダリングする。

キャッシュ(赤本P442)


かかない。


  • 最終更新:2011-02-16 10:12:54

このWIKIを編集するにはパスワード入力が必要です

認証パスワード