2010年7月29日木曜日

rails helper の汚染ふたたび

 ヘルパの汚染が深刻なのである…。
active_scaffold を使っていると、helper にて

def options_for_association_conditions(association)
if association.name == :hoge
['hoge.funya = ?', 1]
elsif association.name == :fuga
['fuga.hoe = ?', 2]
else
super
end
end

なんてコードを書いて、リレーションの選択時に、コントローラで特有のフィルタリングを行ないます。
ところが、こいつも汚染されてしまう…。

 どう対処するか?ヘタレな方法だけども


class ApplicationController < ActionController::Base
before_filter :set_controller_name

def set_controller_name
session[:controller_name] = self.class;
end
end


として、


def options_for_association_conditions(association)
if session[:controller_name] == 'MogeController'
if association.name == :hoge
['hoge.funya = ?', 1]
elsif association.name == :fuga
['fuga.hoe = ?', 2]
else
super
end
else
if association.name == :hoge
['hoge.funya = ?', 2]
elsif association.name == :fuga
['fuga.hoe = ?', 3]
else
super
end
end
end


という指針にしますた。まだ何か落とし穴がありそうな… Object って危ないのねん、好きになれないな…。

2010/8/6 追記: appliction_controller.rb に

helper :all

の文字が…、こんなの知らねーよっ orz...

0 件のコメント: