3

Rails アプリでモデルとコントローラーを再度開いて、Engine からモデルとコントローラーを拡張したいと考えています。問題は、アプリの起動時に読み込まれないことです。機能を拡張するRailsエンジンや、メインアプリケーションでRails 3エンジンモデルとコントローラーをオーバーライドする方法など、これにはいくつかのソリューションがあることを知っていますか? 、しかし、これはレールのロードシーケンスが原因であると思われ、適切な解決策があるはずです.

それから私はこの解決策に出くわします:

config.railties_order = [Blog::Engine, :main_app, :all]

ただし、エンジンのモデルとコントローラーは読み込まれますが、レールのモデルとコントローラーは読み込まれません。誰かが以前にこの作品を作ったのだろうか?

4

2 に答える 2

0

You can reopen the controller classes by having the main Rails application controllers inherit from a Rails Engine. This did not require the config.railties_order in order to get the controllers working,

#/app/controllers/answer_sheets_controller.rb
require YourCustomEngine::Engine.root.join('app', 'controllers', 'your_custom_engine', 'answer_sheets_controller')

class AnswerSheetsController < YourCustomEngine::AnswerSheetsController

From some reason, this strategy is not working for the models.

于 2012-07-11T23:11:12.270 に答える
0

私の解決策:

# === in engine
class EngineNameSpace::Blog
  # logic goes here
end

class Blog < EngineNameSpace::Blog
  # no codes should go here
end

# === in app
# If I need to extend the Blog class, I will code as below instead of reopenning the class
class Blog < EngineNameSpace::Blog
  # do something
end

説明:

Rails は、エンジン クラスが親アプリ内のものと同じファイル名/パスである場合、エンジン クラスの読み込みをブロックします。 -3エンジン/

于 2012-07-12T12:12:21.650 に答える