0

Rails 4エンジンから拡張しようとしているActionController::Baseので、それをマウントするアプリは各アクションの前に特定のメソッドを実行します。これを行うには、懸念class_evalやオープンクラス化など、いくつかの異なる方法がある可能性があることを理解しましたが、私はこれについてまったく新しいものであり、見つけたリンクは主にメインアプリからエンジンコントローラーを拡張する方法ではなく、エンジンコントローラーを拡張する方法に関するものでした。私がしようとしているように周りの道。

これは私が試したことです。次のように、エンジンのコントローラーフォルダーに新しいフォルダーを作成しました。

my_engine
  |-- app
        |-- controllers
              |-- action_controller
                  |-- base_controller.rb
              |-- my_engine
                  |-- some_controller.rb
                  |-- other_controller.rb

そして、base_controller.rb私は以下を追加しました:

require_dependency "action_controller/base"

module ActionController
  class BaseController

    before_action :some_method

    private
    def some_method
      #just for testing
      redirect_to 'http://www.google.com'
    end
  end
end

これは機能しません。ロードされていないためだと思ったので(レールエンジンでこのようなカスタムコードを配置する方法と場所をまだ理解しようとしています)、そのコードをmy_engine/lib/my_engine/engine.rbファイルにコピーしようとしましたが、次のエラーが発生しましたサーバーの起動時:

undefined method `before_action' for ActionController::BaseController:Class (NoMethodError)

どうすればこれを達成できますか? また、ファイルをどこに正しく配置すればよいですか?

4

1 に答える 1