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)
どうすればこれを達成できますか? また、ファイルをどこに正しく配置すればよいですか?