3

Rails 4 では、マウントされたエンジンを使用してアプリケーションを操作する場合、次の 2 つがありますApplicationController

  • class ApplicationController < ActionController::Baseアプリケーションのために
  • class MyEngine::ApplicationController < ActionController::Baseエンジン用

エンジンApplicationControllerはアプリケーションから継承しないため、アプリケーションApplicationControllerに適用されたフィルタはエンジンには適用されません。

マウントされたエンジンからのものを含むbefore_actionafter_actionまたはすべてのアプリケーションルートに適用するにはどうすればよいですか? around_actionもちろん、エンジンコードには触れずに。

どうもありがとう。

4

3 に答える 3

0

エンジンの engine.rb ファイルにフィルターを追加できます

initializer :append_before_action do
   ActionController::Base.send :before_action, :do_a_thing
end
于 2016-06-28T14:29:08.620 に答える
0

FWIW in 201、Rails 5.2 頃、これを行うためのより良い方法があります。この質問の問題の要点は、エンジンの名前空間の分離を中心に展開しています。

メイン アプリの ApplicationController で必要なメソッドを、Rails Engine の ApplicationHelper モジュールに追加します。

次に、エンジン ロード フックを介してそれらをアプリケーションにミックスします。(engine.rb ファイル内)

ActiveSupport.on_load(:action_controller_base) {
  include Yourengine::ApplicationHelper
}

アプリケーションの ApplicationController でメソッドを使用できるようになりました。

Rails アプリケーションの Application Controllerにbefore_actionを追加できるようになりました。私は、before アクションは、Rails エンジンではなく、Rails アプリケーションでの明示的な操作であるべきだと考えています。つまり、子供が親に何かを強制するべきではありません。

于 2018-10-25T22:04:29.493 に答える