あるフィルタが定義されているかどうかを知りたいとき、
Controller
before 2.1
1 >> ApplicationControlle r.filter_cha in.class 2 => Array
after 2.1
1 >> ApplicationControlle r.filter_cha in.class 2 => ActionCont roller::Filters::FilterChai n
Controller
- find_filte
r - append_fil
ter_to_cha in - prepend_fi
lter_to_ch ain - ...
を直接コントローラに定義する(2.1以前)のではなく、 同クラスに持たせることができるようになった。 これは、名前空間的にも責務の明瞭化としても進化と言える。
2.1 でのフィルタの検索
従って、今後は Controller
1 >> ApplicationControlle r.filter_cha in.find(:login_requ ired) 2 => #<ActionCont roller::Fi lters::Bef oreFilter: 0x2621914 ...
互換性
しかしながら、未だに1.2ユーザも多いプラグインなどでは後方互換性が必要である。
色んな対応策が考えられるが、
ここでは、2.1 側に涙を飲んでもらって、
せっかく奇麗にした所を悪いが find_filte
1 ActionController::Base.class_eval do 2 unless respond_to ?(:find_filte r) 3 def self.find_ filter(name) 4 filter_cha in.find(name) 5 end 6 end
(vendor/plu
posted by
maiha
on Thu 7 Aug 2008
at 10:49