Rails勉強会@東京第31回に参加してきた.
先月は RubyKaigi 会場での開催となったので,2ヶ月ぶりの開催です.主催の皆さまありがとうございます.
そしてまとめログを.
時間割
前半セッション:named_scope についてくわしく
- named_scope
- Rails 2.1 からの新機能.
- 検索集合に対して名前をつける.
- Method Chain で賢く Query が吐かれる.
- なにができるのか
- 実際には
- :conditions を指定した絞り込み
- 引数を渡すこともできる
- method chain で適切な SQL を生成してくれる
- 集合に対する演算も適宜できる
- User.active.ban で active users を全て deleted = true にできる
named_scope :actione, :conditions => ["#{table_name}.deleted = ?", false] do def ban self.update_all("deleted = true") end end
- ActiveRecord::Base に追加される method
- self.scopes() <- proxy ぽいものを返す
- self named_scope() <- これを使う
- Scope を作る Proc を作ってクラス変数に代入.
- named_scope の name を define_method する
- Scopne.new(parent, options, &block)
- parent : 親スコープ
- 左側にあるスコープ
- method_missing
- 自スコープに method がなければ,「親スコープ」の method_missing を呼び出す
- これで method_chain ができてる?
- 自スコープに method がなければ,「親スコープ」の method_missing を呼び出す
- parent : 親スコープ
FAQ とか質疑応答とか
- limit / order / join は?
- 最初に(一番左)にあるものだけ.あとは上書きされずに無視される.
- join はバグっぽいどうさをするらしい.
- 結合は?
- 実行順序は?
- 最後から積演算されていく.
- UPDATE 文が実行されるときには,ActiveRecord::Base.connection.update が呼ばれる
- ここを見張っていればチューニングできるかも?
- Ruby 1.9 だと Proc に default 引数を書ける
- lambda が -> 演算子になる.詳しくはリファレンスマニュアルを見よう.
- max / sum などは?
- 順序にさえ気をつければ大丈夫なはず.
- default で User.active.find(...) なんてことは?
- うまい方法は見つかってない.
後半セッション:iKnow
RubyKaigi 2008 の振り返る+α
今回のお話
- 複数のRails Application を同じデータベース上に展開したい.
- migration と test をどうしよう
- 複数データベースを使った方法
- OO 的に if を多様するには論外
- Logging
- ProcessID をログに吐かないと調べにくいことがある
- Supporting Mobile
- SQL
- Sub-query で index 付き SELECT をした方が速い場合がある.
select id, name, created_at from users order by id desc limit 10; select id, name, (select created_at from users where users.id = id) from users order by id desc limit 10;
- Dependencies.clear
- development はファイルがアップデートされると依存関係を clear して再読込するが,production はしない.
- Class の autoload の規約と実装方法を調べる必要あり?
- Fixture hell?
- Fixture が巨大になりすぎる.
- fixtures :all
- 全ての fixture を load する
- PageView などは MERGE Engine を使ってる
- 時間を指定した fixture
- fixture を laod するときはテストそのものの時間がかかると,テストに失敗する場合がある.
- Timw.now に基底時間を作っておく
- fixture を laod するときはテストそのものの時間がかかると,テストに失敗する場合がある.
- Fair Proxy Balancer
- どれが1つでも時間がかかっていれば,そこにアクセスするユーザは待たされてしまう.これを buzy かどうかを判定して,4 を b に割り振るなどしたい.
a (1 s) b (0.5 s) c (0.5 s) 1 a 2 b 3 c 4 waits for a 5 b 6 c 7 waits for a 8 b 9 c 10 waits for a
- Plugins
- 日本語のローカライズ
- GetText が多い
- Globalize
- RedCloth
- White List
- 許可できる html などを指定できる.
- constatnt_cache
- asset_packager
- 日本語のローカライズ
質疑応答
- ビジネスモデルは?
- 広告モデル
- コンテンツ作成費は?
- 今後は CGM に.
- xaky++