1

Rails Engine によって定義されたコントローラーでアクションをオーバーライドしようとしています。

次のように、クラスを再度開く前に元のファイルを要求する必要があるようです。

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 はかなり醜いです。最初のrequireを回避できるRailsの魔法はありますか?

4

1 に答える 1

1

これは完全な推測です...

ロードタイミングの問題のようです。のように、ファイルはプラグインの前にロードされます。あなたのアクションはどこにありますか?構成/初期化子? ライブラリ?

Rails Engines がいつロードされるかはわからないので、場所をいじってみてください (lib に置くことで動作するはずです)。

または、さらに良いのは、変更を加えた独自のプラグインを作成し、元のプラグインの後にロードされることを確認することです。

そして、おそらく次のようなものが必要です。

SomeController.class_eval do

  def index
    ...
  end

end
于 2009-12-01T01:54:00.900 に答える