Railsレシピブック Recipe 29 - 47
Railsレシピブック Recipe 1 - 17 - maeshimaの日記
Railsレシピブック Recipe 18-28 - maeshimaの日記
の続き。ActionControllerの章の終わりまで。
filter
- after_filterの使いどころについては前調べて書いたafter_filterの使いどころ - maeshimaの日記
- filterの使い方については昔メモしたafter_filterの実行タイミングではまった - おもしろWEBサービス開発日記
フィルタクラスを作るメリットはいまいちわからない。1メソッドを定義するために1クラス作るのは効率が悪いように思う。なので自分はよくapplication_controller中にメソッド定義してしまう。→ around_filterを使う時には、アクション前後で共通した変数を使うことの出来るフィルタクラスを使った方が便利なようだ。
respond_to
個人的にはほぼ使わないメソッドだけど、概念は覚えておきたい。
flash.now
これは知らなかった。flashは基本的に次のリクエストまで有効なので、redirect_toで利用する時はいいけどrenderを使いたいときには使えなくて困ってた。超便利ですね。
session
「セッションクッキーに大事な情報をいれてはいけない」というのはわかるのだけど、一応暗号化っぽいことはされてる。これってどのくらい頑丈な暗号化なんだろうなー。またRails3ではsigned cookieのような仕組みもあり、これもセッションクッキーと同じような感じで暗号化されてる。たぶん改ざん防止がメインで暗号化はおまけ何じゃないかと思うけど、どのくらいの強度の暗号形式を使っているのか時間あったら調べたい。
ActiveRecord形式で保存されているセッションを無効にする
これまで
ActiveRecord::Base.connection.execute "DELETE FROM sessions where '#{14.days.ago.to_s(:db)}' > updated_at;"
みたいな形のスクリプトを作って直接SQL叩いてたけど
CGI::Session::ActiveRecordStore::Session.delete_all(["sessions.updated_at" < ?", 14.days.ago])
みたいにセッション用のdelete_allメソッドもあるみたい。上記の例はたぶんRails2.3系では使えないけど同じようなメソッドはあると思うので次ぎ使う機会あったら調べる。
画像やファイルをダウンロードさせる
画像のアクセス制限をしたいときには
- DBに画像入れる
- アクセス制限をかけたアクションでsend_data
としたらいいと思った。
キャッシュ
- ページキャッシュ
- アクション単位のキャッシュ
- フラグメントキャッシュ
とあるけど、ヘッダのviewを、ユーザのログイン状態によって表示が切り替わるようにしていることが多いので、フラグメントキャッシュ以外は使わないだろうなー
touchメソッドを使ってフラグメントキャッシュを実装する例
Rails2.3.3での変更点 - おもしろWEBサービス開発日記
ルーティング
オプション忘れがち。特にdefaults。
- URLパターンを指定するrequirementsパラメータ
- URLパターンのデフォルト値を指定するdefaultsパラメータ
名前空間の導入もできる。Rails3から導入されたのかと思ってたら既にあった。
map.namespace "admin" do |admin_map| admin_map.connect ":controller/:action/:id" end
RESTfulなルーティングについてはずっと前にまとめていた
URLの導出
url_forにモデルオブジェクトを渡せる
url_for(Blog.new) #=> "http://www.example.com/blogs"
参考
ソフトバンククリエイティブ
売り上げランキング: 95082