Saturday, January 5, 2008

"Advanced Rails Recipes" beta book updated with 25 more recipes!

Advanced Rails Recipesにひと月足らずで25の新しいレシピが追加された。
先日の記事What I'v just discovered in Advanced Rails Recipesでは、あんまり面白くなかったと書いたけれど、今回追加されたレシピには興味を惹く引くものが多かった。
追加されたレシピのタイトルは、著者の Mike Clark のブログで参照してください。

また、前回と同様に簡単なメモを...

Skinny Controller, Fat Model


モデルが汚くなるのを犠牲にしてもコントローラをシンブルにすることを自分と同僚で推奨していたが、そのことが "skinny controller, fat model" (もとネタは Jamis Back のブログらしい) という言葉で、いくつかのレシピで言及されているのを見て、「やっぱりそれでよかったんだ」と思った。

caching up with big guys


cache_fu は ActiveRecord::Base.find の結果をキャッシュする。
acts_as_cached には :include => :tags や :ttl => 5.minutes がある。

returning true do
...
end

というコードがあり、 active support に returning というメソッドがあることを知った。

returning [] do |value|
value << "foo"
value << "bar"
end

という使い方もできる。
activesupport/lib/active_support/core_ext/object/misc.rb を見たら with_options もあったことを思い出した。
しかし、こういうよく知られていない、または自前のメソッドを使うとコードがわかりにくくなる。

Creating meaningful relationships through proxies



group.rb:
has_many :users

user.rb:
class User < ActiveRecord::Base
def self.find_men
self.find(:all, :conditions => "sex = 'male'")
end
end

で、 association proxy からも group.users.find_men として利用できることを知った。考えてみれば当然かもしれないが気づかなかった。

Decouple your javascript with Low Pro


lowpro.jsのEvent.createBehavior, Event.addBehavior を使えば javascript をスッキリ書けるかも

Dynamically Updating Cached pages


動的要素のあるページを page cache にしたときにそのダイナミックな部分を ajax で更新するようにはしたことがあるが、部分だけタイムラグが出てしまうが、この方法だと session とは別の cookie に javascript だけでダイナミック部分を補完できる情報を(i.e:ユーザー名)入れておけば javascript で cookie の中身を使って static page の補完ができるというアイデア。

Handling Multiple Models In One Form


Project has_many :tasks などのときに、Project#new_tasks= でコントローラを小さくする手法。この手法も良く使う。

Responding To Remote Capistrano Prompts


Capistrano でリモートサーバーの script/console セッションを操作する方法が書いてある。試してみよう。

Taking Advantage of Master/Slave Databases


リプリケーションしたDBへのクエリを master/slave で自動で振り分ける
masochism plugin の紹介。使えるかもしれない。

Testing HTML Validity


HTML test plugin の紹介。
たぶん常に有効になっているとウザイので、 rake html_validity test のようにして実行したときだけ有効になるようにすると良いかもしれない。

No comments: