Rails Engineからコントローラーをオーバーライドするときに元のファイルが必要ですか?
-
22-07-2019 - |
質問
Railsエンジンで定義されたコントローラーのアクションをオーバーライドしようとしています。
次のように、クラスを再度開く前に元のファイルを要求する必要があるようです:
require File.join(RAILS_ROOT, 'vendor/plugins/myplugin/app/controllers/some_controller')
class SomeController
def index
render :text => 'this is my index'
end
end
これは理にかなっていますが、そのrequireはかなりいです。最初の要求を回避できるRailsマジックのようなものはありますか?
解決
これは完全な推測です...
より多くの読み込みタイミングの問題があるようです。同様に、プラグインの前にファイルがロードされます。あなたの行動はどこにありますか? config / initializers? lib?
Rails Enginesがいつロードされるかわからないので、その場所で遊んでください(libに配置することで動作するはずです)。
または、さらに良いことに、変更を加えた独自のプラグインを作成し、元のプラグインの後に確実にロードするようにしてください。
そして次のようなものがおそらく必要です:
SomeController.class_eval do
def index
...
end
end
所属していません StackOverflow