maeshimaの日記

メモ書きです

Railsレシピブック Recipe 29 - 47

Railsレシピブック Recipe 1 - 17 - maeshimaの日記
Railsレシピブック Recipe 18-28 - maeshimaの日記

の続き。ActionControllerの章の終わりまで。

filter

フィルタクラスを作るメリットはいまいちわからない。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系では使えないけど同じようなメソッドはあると思うので次ぎ使う機会あったら調べる。

画像やファイルをダウンロードさせる

画像のアクセス制限をしたいときには

  1. DBに画像入れる
  2. アクセス制限をかけたアクションでsend_data

としたらいいと思った。

キャッシュ

  • ページキャッシュ
  • アクション単位のキャッシュ
  • フラグメントキャッシュ

とあるけど、ヘッダのviewを、ユーザのログイン状態によって表示が切り替わるようにしていることが多いので、フラグメントキャッシュ以外は使わないだろうなー

touchメソッドを使ってフラグメントキャッシュを実装する例
Rails2.3.3での変更点 - おもしろWEBサービス開発日記

cookie

cookieではなくcookiesメソッド。複数形。RESTful厨なので基本的には使わない。

cookies[:accessed_on] = Time.now.to_s

ルーティング

オプション忘れがち。特にdefaults。

  • URLパターンを指定するrequirementsパラメータ
  • URLパターンのデフォルト値を指定するdefaultsパラメータ

名前空間の導入もできる。Rails3から導入されたのかと思ってたら既にあった。

map.namespace "admin" do |admin_map|
  admin_map.connect ":controller/:action/:id"
end

RESTfulなルーティングについてはずっと前にまとめていた

rails de REST - おもしろWEBサービス開発日記

URLの導出

url_forにモデルオブジェクトを渡せる

url_for(Blog.new) #=> "http://www.example.com/blogs"

参考

Railsレシピブック 183の技
高橋 征義 諸橋 恭介
ソフトバンククリエイティブ
売り上げランキング: 95082
おすすめ度の平均: 4.5
4 Ruby on Rails(Rails)についての逆引き集
5 Rails必携の一冊
4 Railsの構造・規約を整理できる。
5 Rails初心者にも、よく知ってる方にも役に立つ。Rails使う人必携の一冊。
5 2008年時点でのRails資料の決定版