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 件のコメント:
コメントを投稿