私は、Ruby on Rails 2.3.2でフィルターチェーンを使ってより動的に作業する方法を知りたいと思います。Ruby on Rails FilterChain内部 - 再ロード可能にする方法は?
現在、フィルタチェーンはクラスがロードされるときに構築されます。私は、クラスがロードされた後のある時点でフィルタチェーンが再構築されることを特に必要としています。
これは、フィルタチェーンはMyController用に構築された後、このようなことを行うことができます拡張子を使用していますRailsのプロジェクト(スプリー、ラディアントはまた、私は推測している影響を受ける可能性がある)を行うことです。
MyController.class_eval do
before_filter :my_filter_method
end
ApplicationController.class_eval do
before_filter :app_filter_method
end
ここでの問題は、app_filter_method
フィルタではなく、をMyControllerフィルタチェーンに追加することです。これは、MyControllerのフィルタチェーンが、ApplicationControllerのフィルタチェーンの以前のコピーから構築されているためです。このApplicationControllerのフィルタチェーンのコピーはではなく、ではまだapp_filter_method
フィルタが適用されています。
私は今のところれるFilterChainの再建がで起こりうることを2ヶ所と考えることができます:それはMyController.filter_chain
2で呼び出されるたびに)オンデマンドでリロード)
1。 MyController.reload_filter_chainは、チェーン内のMyControllerのサブクラスのフィルタを使用して、フィルタチェーンを再構築します。
おそらく、それぞれの要求に対してフィルタチェーンを構築するReloadableFilterChainのようなFilterChainのサブクラスを指定すると、それは可能でしょうか?私はいくつかの洞察力を持っているかもしれないここにあなたのいくつかを期待していた
The filter_chain method (line 573)
The FilterChain class (line 10)
:
はここでRailsの2.3.2にRuby用のGitHubの、上filters.rbのソースへのリンクですまたはこれを行う方法に関する助言。
ご迷惑をおかけして申し訳ございません。
エリオット
要求されるようにもっと詳しく:
シュプレー川が動作を変更するための拡張機能を使用してレールのアプリです。
拡張機能を使用してコントローラにフィルタを追加することがあります(質問のサンプルコードなど)。 1つの使用例は、静的コンテンツ拡張である。
静的コンテンツ拡張機能を使用すると、指定した要求パスに対して、データベースに格納されたHTMLページを表示して表示することができます。たとえば、デフォルトのコンテンツの代わりにこれらのHTMLページの1つを表示することができます。
静的コンテンツ拡張機能は、すべての要求をフィルタリングし、パスをチェックします。パスがdb内のページのいずれかと一致する場合、フィルタはページをレンダリングします。
静的コンテンツの拡張子は次のようにそのフィルタを宣言していますので:
Spree::BaseController.class_eval do
before_filter :render_page_if_exists
def render_page_if_exists
...
end
end
詳細は有用であろう。 – jonnii
*少し*詳細を追加しました。私が助けるために追加できるものは何ですか? –
私はその理由にもっと興味があります。 – jonnii