Rails Engineからコントローラーをオーバーライドするときに元のファイルが必要ですか?

StackOverflow https://stackoverflow.com/questions/1823361

  •  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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top